Skip to content

Commit 87270e3

Browse files
committed
ugly way to fix metadata load fail
1 parent 5d42594 commit 87270e3

File tree

3 files changed

+45
-33
lines changed

3 files changed

+45
-33
lines changed

src/main/java/cn/aethli/mineauth/Mineauth.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class Mineauth {
7373
public Mineauth() throws IOException, ClassNotFoundException {
7474
initialInternalDatabase(DEFAULT_H2_DATABASE_FILE_RESOURCE_PATH);
7575
MetadataUtils.initMetadata();
76-
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, MineauthConfig.FORGE_CONFIG_SPEC);
76+
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, MineauthConfig.FORGE_CONFIG_SPEC);
7777
MinecraftForge.EVENT_BUS.register(this);
7878
}
7979

src/main/java/cn/aethli/mineauth/common/utils/MetadataUtils.java

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package cn.aethli.mineauth.common.utils;
22

3-
import cn.aethli.mineauth.Mineauth;
4-
import cn.aethli.mineauth.annotation.MetadataScan;
53
import cn.aethli.mineauth.common.model.EntityMapper;
4+
import cn.aethli.mineauth.entity.AuthPlayer;
65
import cn.aethli.mineauth.entity.BaseEntity;
7-
import com.google.common.collect.ImmutableSet;
8-
import com.google.common.reflect.ClassPath;
6+
import org.apache.logging.log4j.LogManager;
7+
import org.apache.logging.log4j.Logger;
98

109
import java.io.File;
1110
import java.io.IOException;
@@ -15,11 +14,11 @@
1514
import java.util.*;
1615
import java.util.concurrent.ConcurrentHashMap;
1716
import java.util.concurrent.atomic.AtomicBoolean;
18-
import java.util.stream.Collectors;
1917

2018
public class MetadataUtils {
2119
private static final Map<String, EntityMapper> ENTITY_MAPPER_MAP = new ConcurrentHashMap<>();
2220
private static final AtomicBoolean initFlag = new AtomicBoolean(false);
21+
private static final Logger LOGGER = LogManager.getLogger();
2322

2423
/**
2524
* init metadata, to cache entity-field map exclude abstract class and non-extends BaseEntity
@@ -37,7 +36,7 @@ public static void initMetadata(String packageName) throws IOException, ClassNot
3736
classes.forEach(
3837
aClass -> {
3938
if (!Modifier.isAbstract(aClass.getModifiers())
40-
/*&& BaseEntity.class.isAssignableFrom(aClass)*/) {
39+
&& BaseEntity.class.isAssignableFrom(aClass)) {
4140
Set<Field> fields = new HashSet<>(Arrays.asList(aClass.getDeclaredFields()));
4241
fields.addAll(Arrays.asList(baseEntityFields));
4342
EntityMapper entityMapper = ENTITY_MAPPER_MAP.get(aClass.getTypeName());
@@ -56,12 +55,22 @@ public static void initMetadata() throws IOException, ClassNotFoundException {
5655
if (initFlag.get()) {
5756
return;
5857
}
59-
Class<Mineauth> mineauthClass = Mineauth.class;
60-
if (mineauthClass.isAnnotationPresent(MetadataScan.class)) {
61-
MetadataScan metadataScan = mineauthClass.getAnnotation(MetadataScan.class);
62-
for (String packageName : metadataScan.packageName()) {
63-
MetadataUtils.initMetadata(packageName);
64-
}
58+
// Class<Mineauth> mineauthClass = Mineauth.class;
59+
// if (mineauthClass.isAnnotationPresent(MetadataScan.class)) {
60+
// MetadataScan metadataScan = mineauthClass.getAnnotation(MetadataScan.class);
61+
// for (String packageName : metadataScan.packageName()) {
62+
// MetadataUtils.initMetadata(packageName);
63+
// }
64+
// }
65+
Field[] baseEntityFields = BaseEntity.class.getDeclaredFields();
66+
HashSet<Field> fields = new HashSet<>(Arrays.asList(AuthPlayer.class.getDeclaredFields()));
67+
fields.addAll(Arrays.asList(baseEntityFields));
68+
EntityMapper entityMapper = ENTITY_MAPPER_MAP.get(AuthPlayer.class.getTypeName());
69+
if (entityMapper == null) {
70+
entityMapper = new EntityMapper();
71+
entityMapper.setClassName(AuthPlayer.class.getTypeName());
72+
entityMapper.setFields(fields);
73+
ENTITY_MAPPER_MAP.put(AuthPlayer.class.getTypeName(), entityMapper);
6574
}
6675
initFlag.set(true);
6776
}
@@ -87,26 +96,28 @@ public static EntityMapper getEntityMapperByTypeName(String typeName) {
8796
*/
8897
private static <T extends BaseEntity> List<Class<T>> getClasses(String packageName)
8998
throws ClassNotFoundException, IOException {
99+
// both not works with java -jar
100+
// ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
101+
// ClassPath classpath = ClassPath.from(classLoader); // scans the class path used by
102+
// classloader
103+
// ImmutableSet<ClassPath.ClassInfo> topLevelClasses =
104+
// classpath.getTopLevelClasses(packageName);
105+
// List<? extends Class<?>> collect =
106+
// topLevelClasses.stream().map(ClassPath.ClassInfo::load).collect(Collectors.toList());
107+
// return (List<Class<T>>) collect;
90108
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
91-
ClassPath classpath = ClassPath.from(classLoader); // scans the class path used by classloader
92-
ImmutableSet<ClassPath.ClassInfo> topLevelClasses = classpath.getTopLevelClasses(packageName);
93-
List<? extends Class<?>> collect =
94-
topLevelClasses.stream().map(ClassPath.ClassInfo::load).collect(Collectors.toList());
95-
return (List<Class<T>>) collect;
96-
//not works on produce
97-
// ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
98-
// String path = packageName.replace('.', '/');
99-
// Enumeration<URL> resources = classLoader.getResources(path);
100-
// List<File> dirs = new ArrayList<>();
101-
// while (resources.hasMoreElements()) {
102-
// URL resource = resources.nextElement();
103-
// dirs.add(new File(resource.getFile()));
104-
// }
105-
// ArrayList<Class<T>> classes = new ArrayList<>();
106-
// for (File directory : dirs) {
107-
// classes.addAll(findClasses(directory, packageName));
108-
// }
109-
// return classes;
109+
String path = packageName.replace('.', '/');
110+
Enumeration<URL> resources = classLoader.getResources(path);
111+
List<File> dirs = new ArrayList<>();
112+
while (resources.hasMoreElements()) {
113+
URL resource = resources.nextElement();
114+
dirs.add(new File(resource.getFile()));
115+
}
116+
ArrayList<Class<T>> classes = new ArrayList<>();
117+
for (File directory : dirs) {
118+
classes.addAll(findClasses(directory, packageName));
119+
}
120+
return classes;
110121
}
111122

112123
/**

src/test/java/cn/aethli/test/mineauth/DataBaseTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public void databaseInit() throws SQLException, IOException, ClassNotFoundExcept
4040
"root",
4141
"admin",
4242
2);
43-
metadataInit();
43+
// metadataInit();
44+
MetadataUtils.initMetadata();
4445
DataUtils.DatabaseInit();
4546
}
4647

0 commit comments

Comments
 (0)