我編寫了Java工具(本例中爲iOffloadMaker),它也包含自定義的Ant任務作爲啓動Ant的主要啓動工具。我將所有外部jar庫捆綁到了我的工具的jar中。我也提供了一個簡單的Ant build.xml文件來啓動我的工具:java.lang.NoClassDefFoundError,Ant任務無法在jar中看到jar中的類
<?xml version="1.0"?>
<project name="TestBound" default="main" basedir=".">
<!-- Sets varables which can later be used. -->
<property name="src.dir" value="src" />
<property name="build.dir" value="bin" />
<property name="dist.dir" value="dist" />
<property name="libs.dir" value ="libs" />
<path id="build.classpath">
<fileset dir="${libs.dir}">
<include name="**/*.jar"/>
</fileset>
<pathelement location=".\iOffloadMaker.jar"/>
</path>
<!-- define offload maker task -->
<taskdef name="iOffloadMaker" classname="com.richardle.ioffload.OffloadMakerTask" classpathref= "build.classpath"/>
...
<!-- Creates the build, docs and dist directory-->
<target name="modify" description="modify the source code" >
<iOffloadMaker projectFolder="${basedir}">
</iOffloadMaker>
</target>
...
<target name="main" depends="compile">
<description>Main target</description>
</target>
</project>
的事情是,Ant任務不能引用類的罐子庫我的工具JAR文件中。因此,當我運行螞蟻,它拋出異常,因爲
D:\SOFTWARE\Android\TestBound>ant modify
Buildfile: D:\SOFTWARE\Android\TestBound\build.xml
modify:
[iOffloadMaker] Offload Maker is executing...
BUILD FAILED
D:\SOFTWARE\Android\TestBound\build.xml:40: java.lang.NoClassDefFoundError: org/
xmlpull/v1/XmlPullParserException
at com.richardle.ioffload.offloadmaker.ApplicationProject.<init>(Applica
tionProject.java:30)
at com.richardle.ioffload.offloadmaker.OffloadMaker.execute(OffloadMaker
.java:121)
at com.richardle.ioffload.OffloadMakerTask.execute(OffloadMakerTask.java
:26)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
我相信,所有必要的庫都捆綁到iOffloadMaker.jar。問題在於Ant Task loader無法在我的jar文件中看到依賴JAR的類。
如果我沒有將所有依賴項捆綁到jar中,而是將它們與iOFfloadMaker.jar一起交付到依賴項文件夾中,它將按我的預期工作。但是我想將所有的依賴和我的工具源代碼捆綁到一個交付jar文件中。
有沒有解決這個問題的方法?
相關問題:http://stackoverflow.com/questions/19015447/javas-classloader-versus-jars-within-jars –
@AaronDigulla:謝謝你,我用的JarClassLoader和它的工作對我來說 –