我有一个服务器扫描包含一些jar的文件夹,并为每个jar获取类,它是AbstractPlugin类的子类。
我用这个罐子来帮助我:https://code.google.com/p/reflections 但是当我从
迁移时 <dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
到:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.10</version>
</dependency>
此代码不再有效:
File pluginFolder = new File(PROP.getString("plugin.folder", "./plugins/"));
for (File file : pluginFolder.listFiles()) {
if (file.getName().endsWith(".jar")) {
List<URL> jarsUrl = new ArrayList<>();
URL jarUrl = file.toURL();
jarsUrl.add(jarUrl);
ClassLoader loader = URLClassLoader.newInstance(
jarsUrl.toArray(new URL[] {}),
getClass().getClassLoader()
);
Reflections reflections = new Reflections(
ClasspathHelper.forClassLoader(loader),
new SubTypesScanner()
);
Store store = reflections.getStore();
Set<String> pluginClass = store.getSubTypesOf(AbstractPlugin.class.getName());
}
}
在迁移之前,pluginClass会回复我所有在Abstract&#34;插件&#34;的jar中从AbstractPlugin中删除的类。文件夹中。
所以我尝试使用新代码来做同样的事情:
File pluginFolder = new File(PROP.getString("plugin.folder", "./plugins/"));
Arrays.asList(pluginFolder.listFiles())
.stream()
.filter(file -> file.getName().endsWith(".jar"))
.forEach((file) -> {
try {
System.out.println(file.getName());
Reflections reflections = new Reflections(
new ConfigurationBuilder()
.addUrls(file.toURI().toURL())
.addScanners(new SubTypesScanner(false))
);
System.out.println(reflections.getAllTypes());
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
});
它也不起作用。有人可以帮我解决这个问题并为文件夹中的每个jar获取所有类型的AbstractPlugin类吗?
提前谢谢: - )