问题描述
我有一个使用ant构建导出到可运行jar的eclipse项目,并且我使用jar-in-jar加载器将一些jar库放入项目jar中。这曾经是可行的,在我的记忆中,更新到java 9是破坏它的原因。我可能错了,但我只是用了我的罐子一段时间,直到它停止工作。
在eclipse中运行项目很好,但当我使用jar并调用其中一个库中的方法时,我得到一个noclassdeffounderror。不管是哪个库。
java.lang.noclassdeffounderror: myutils/myutils at packagename.utils.input(utils.java:42) at packagename.main.main(main.java:83) at java.base/jdk.internal.reflect.nativemethodaccessorimpl.invoke0(native method) at java.base/jdk.internal.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) at java.base/jdk.internal.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) at java.base/java.lang.reflect.method.invoke(method.java:567) at org.eclipse.jdt.internal.jarinjarloader.jarrsrcloader.main(jarrsrcloader.java:58) caused by: java.lang.classnotfoundexception: myutils.myutils at java.base/java.net.urlclassloader.findclass(urlclassloader.java:436) at java.base/java.lang.classloader.loadclass(classloader.java:588) at java.base/java.lang.classloader.loadclass(classloader.java:521) ... 7 more
以下是ant版本:
编辑:以下是manifest.mf:
manifest-version: 1.0 ant-version: apache ant 1.10.5 created-by: 12.0.2 10 (oracle corporation) main-class: org.eclipse.jdt.internal.jarinjarloader.jarrsrcloader rsrc-main-class: packagename.main rsrc-class-path: ./ guava-19.0.jar jsoup-1.9.1.jar myutils.jar class-path: .
推荐答案
问题
可能您的文件jar-in-jar-loader.zip已过时,不适合java>;=9,我也遇到了同样的问题。
尊龙凯时的解决方案
要获取该文件的最新版本,请右键单击您的项目-&>导出-&>可运行的jar文件--选中&>另存为ant脚本--&>完成。这将在您的项目目录中创建jar-in-jar-loader.zip的最新版本。蚂蚁脚本本身不需要调整,至少在我的例子中是这样。