Java 如何使用部署为uberjar的库?

Java 如何使用部署为uberjar的库?,java,jar,uberjar,reflections,Java,Jar,Uberjar,Reflections,我正在尝试使用Reflections 0.9.8库,它是一个uber jar。如果我在项目的构建路径中添加它的JAR(“reflections-0.9.8-uberjar”),那么Eclipse将找不到它的任何类类型:Reflection、ClasspathHelper等等 如果我提取单个“reflections-0.9.8.jar”(nottheuberone)并将其添加到构建路径中,那么在编译时一切都可以正常工作,但当我执行项目时,我会得到一个NoClassDefFoundError(我很确

我正在尝试使用Reflections 0.9.8库,它是一个uber jar。如果我在项目的构建路径中添加它的JAR(“reflections-0.9.8-uberjar”),那么Eclipse将找不到它的任何类类型:Reflection、ClasspathHelper等等

如果我提取单个“reflections-0.9.8.jar”(nottheuberone)并将其添加到构建路径中,那么在编译时一切都可以正常工作,但当我执行项目时,我会得到一个NoClassDefFoundError(我很确定这是由于缺乏依赖性造成的)

我还尝试在uber jar中添加每一个.jar,但仍然会得到NoClassDefFoundError

要使用这个作为uberjar分发的库,我必须做什么

编辑: 如果有帮助的话,这就是我想调用反射的方法(这是我从中提取的一个片段):


private static Set我和你有同样的问题,消息NoClassDefFoundError。搜索了一段时间后,我发现在其他jar(如reflections-0.9.8.jar中存在的jar)中使用jar会产生这个问题。然而,当我像你一样提取它时,我又看到了同样的问题。我推断这可能是由于反射包的编译版本(在1.5版中编译)以及我的项目是在1.6版上编译的

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


我希望它能有所帮助。

也许你可以说什么是找不到的类,并检查它是否在手动连接的jar中可用。
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);

}