使用JAR-in-JAR加载器时出现NoClassDefFoundError
it1352
帮助71人
问题说明
我有一个使用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版本:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="create_run_jar" name="Create Runnable Jar for Project ProjectName with Jar-in-Jar Loader">
<!--this file was created by Eclipse Runnable JAR file Export Wizard-->
<!--ANT 1.7 is required-->
<!--define folder properties-->
<property name="dir.buildfile" value="."/>
<property name="dir.workspace" value="${dir.buildfile}/.."/>
<property name="dir.libraries" value="${dir.buildfile}/../../libraries"/>
<property name="dir.projectjars" value="${dir.buildfile}/../../project-jars"/>
<target name="create_run_jar">
<jar destfile="${dir.projectjars}/jarname.jar">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
<attribute name="Rsrc-Main-Class" value="packagename.Main"/>
<attribute name="Class-Path" value="."/>
<attribute name="Rsrc-Class-Path" value="./ guava-19.0.jar jsoup-1.9.1.jar myutils.jar"/>
</manifest>
<zipfileset src="https://www.it1352.com/jar-in-jar-loader.zip"/>
<fileset dir="${dir.buildfile}/bin"/>
<zipfileset dir="${dir.libraries}" includes="guava-19.0.jar"/>
<zipfileset dir="${dir.libraries}" includes="jsoup-1.9.1.jar"/>
<zipfileset dir="${dir.projectjars}" includes="myutils.jar"/>
</jar>
</target>
</project>
编辑:以下是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: .
正确答案
#1
问题
可能您的文件jar-in-jar-loader.zip
已过时,不适合Java>;=9,我也遇到了同样的问题。
解决方案
要获取该文件的最新版本,请右键单击您的项目-&>导出-&>可运行的JAR文件--选中&>另存为Ant脚本--&>完成。这将在您的项目目录中创建jar-in-jar-loader.zip
的最新版本。蚂蚁脚本本身不需要调整,至少在我的例子中是这样。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /reply/detail/tancbc
系列文章
更多
同类精品
更多
-
YouTube API 不能在 iOS (iPhone/iPad) 工作,但在桌面浏览器工作正常?
it1352 07-30 -
iPhone,一张图像叠加到另一张图像上以创建要保存的新图像?(水印)
it1352 07-17 -
保持在后台运行的 iPhone 应用程序完全可操作
it1352 07-25 -
在android同时打开手电筒和前置摄像头
it1352 09-28 -
使用c++17更新时出现G++编译器警告
it1352 06-18 -
使用 iPhone 进行移动设备管理
it1352 07-23 -
扫描 NFC 标签时是否可以启动应用程序?
it1352 08-02 -
复制文件夹/文件而不修改属性?
it1352 07-15 -
Android微调工具-删除当前选择
it1352 06-20 -
Android App 和三星 Galaxy S4 不兼容
it1352 07-20