本文介紹了使用JAR-in-JAR加載器時(shí)出現(xiàn)NoClassDefFoundError的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一個(gè)使用Ant構(gòu)建導(dǎo)出到可運(yùn)行JAR的Eclipse項(xiàng)目,并且我使用JAR-in-JAR加載器將一些JAR庫(kù)放入項(xiàng)目JAR中。這曾經(jīng)是可行的,在我的記憶中,更新到Java 9是破壞它的原因。我可能錯(cuò)了,但我只是用了我的罐子一段時(shí)間,直到它停止工作。
在Eclipse中運(yùn)行項(xiàng)目很好,但當(dāng)我使用JAR并調(diào)用其中一個(gè)庫(kù)中的方法時(shí),我得到一個(gè)NoClassDefFoundError。不管是哪個(gè)庫(kù)。
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="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: .
推薦答案
問(wèn)題
可能您的文件jar-in-jar-loader.zip已過(guò)時(shí),不適合Java>;=9,我也遇到了同樣的問(wèn)題。
解決方案
要獲取該文件的最新版本,請(qǐng)右鍵單擊您的項(xiàng)目-&>導(dǎo)出-&>可運(yùn)行的JAR文件–選中&>另存為Ant腳本–&>完成。這將在您的項(xiàng)目目錄中創(chuàng)建jar-in-jar-loader.zip的最新版本。螞蟻腳本本身不需要調(diào)整,至少在我的例子中是這樣。
這篇關(guān)于使用JAR-in-JAR加載器時(shí)出現(xiàn)NoClassDefFoundError的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,






