gpt4 book ai didi

java - 如何使用作为 uberjar 部署的库?

转载 作者:行者123 更新时间:2023-12-01 05:04:20 26 4
gpt4 key购买 nike

我正在尝试使用 Reflections 0.9.8 库,它以 uber-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);

}

最佳答案

我遇到了和你一样的问题,消息NoClassDefFoundError。搜索了一段时间,我发现将 jar 放在其他 jar 中(例如 Reflections-0.9.8.jar 中存在的 jar )会产生该问题。然而,当我像你一样提取它时,我再次看到同样的问题。我推断这可能是由于Reflection包的编译版本(在1.5版本中编译)造成的,而我的项目是在1.6版本上编译的。

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

Can you find all classes in a package using reflection?

希望对您有所帮助。

关于java - 如何使用作为 uberjar 部署的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12935783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com