1

我正在尝试使用作为 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);

}
4

1 回答 1

0

我和你有同样的问题,消息 NoClassDefFoundError。搜索了一段时间,我发现在其他 jar 中放置 jar,例如在反射 0.9.8.jar 中存在的那些会产生这个问题。然而,当我像你一样提取它时,我又看到了同样的问题。我推断这可能是由于 Reflection 包的编译版本(在 1.5 版本中编译),并且我的项目是在 1.6 上编译的。

我决定放弃使用 Reflections 包并发布了一个临时解决方案来检索包中的类:

您可以使用反射找到包中的所有类吗?

我希望它有所帮助。

于 2013-12-03T18:01:48.857 回答