我正在尝试使用Reflections 0.9.8库,它是一个超级jar。如果我在项目的构建路径中添加它的JAR(“reflections-0.9.8-uberjar”),那么Eclipse将找不到它的任何类类型:Reflection,ClasspathHelper等。
如果我提取单个“reflections-0.9.8.jar”(不 uber 一个)并将其添加到构建路径,那么在编译时一切正常很好,但是当我执行我的项目时,我得到一个NoClassDefFoundError(我很确定它是由缺乏依赖性引起的)。
我也尝试在uber-jar中添加每个.jar,但我仍然会得到NoClassDefFoundError。
如何使用此库作为uberjar分发?
修改 万一它可以提供帮助,这就是我想调用Reflections的方法(这是我从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);
}
答案 0 :(得分:0)
我遇到了和你一样的问题,消息NoClassDefFoundError。搜索了一段时间我发现在其他罐子里面放着罐子,比如Reflections-0.9.8.jar中存在的罐子会产生这个问题。然而,当我像你一样提取它时,我再次看到同样的问题。我推断这可能是由于反射包的编译版本(在1.5版中编译)以及我的项目是在1.6上编译的。
我决定放弃使用Reflections包并发布一个临时解决方案来检索包中的类:
Can you find all classes in a package using reflection?
我希望它有所帮助。