我编写了Java工具(在本例中是iOffloadMaker),它还包含自己定义的Ant Task作为使用Ant启动工具的主要启动器。我将所有外部jar库捆绑到我的工具罐中。我还提供了一个简单的Ant build.xml文件来启动我的工具:
<?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 Task无法引用我的工具jar文件中的jar库中的类。因此,当我运行ant时,它会抛出异常
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)
我确信所有必需的lib都捆绑到iOffloadMaker.jar中。问题是Ant Task loader无法在我的jar文件中看到依赖jar的类。
如果我没有将所有依赖项捆绑到jar中,但是将它们与iOFfloadMaker.jar一起提供在依赖文件夹中,它就像我预期的那样工作。但我想将所有依赖项和我的工具源代码捆绑到一个交付jar文件中。
这个问题有解决方案吗?
答案 0 :(得分:2)
标准Java类加载器无法处理递归JAR(即捆绑在其他JAR中的JAR)。
此页面列出了几个解决方案:http://www.jdotsoft.com/JarClassLoader.php
请让我知道哪一个适合你。