我正在尝试使用作为 uber-jar 提供的 Reflections 0.9.8 库。如果我在项目的构建路径中添加它的 JAR(“reflections-0.9.8-uberjar”),那么 Eclipse 将找不到它的任何类类型:Reflection、ClasspathHelper 等等。
如果我提取单个“reflections-0.9.8.jar”(不是uber的)并将其添加到构建路径中,那么在编译时一切正常,但是当我执行我的项目时,我得到一个 NoClassDefFoundError(我是很确定这是由于缺乏依赖关系造成的)。
我还尝试在 uber-jar 中添加每个 .jar,但我仍然会得到 NoClassDefFoundError。
我需要做什么才能使用这个作为 uberjar 分发的库?
编辑: 如果有帮助,这是我想调用反射的方法(这是我从Can you find all classes in a package using reflection? 中摘录的一个片段?):
private static Set<Class<?>> getAllClassesInPackage(String pckg){
List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
classLoadersList.add(ClasspathHelper.contextClassLoader());
classLoadersList.add(ClasspathHelper.staticClassLoader());
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setScanners(new SubTypesScanner(false), new ResourcesScanner())
.setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
.filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(pckg))));
return reflections.getSubTypesOf(Object.class);
}