java.lang.NoClassDefFoundError,Ant任务无法在jar中的jar中看到类
我编写了Java工具(在这种情况下是iOffloadMaker),它也包含自定义的Ant Task作为启动Ant的主要启动工具。 我将所有外部jar库捆绑到我的工具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:SOFTWAREAndroidTestBound>ant modify
Buildfile: D:SOFTWAREAndroidTestBoundbuild.xml
modify:
[iOffloadMaker] Offload Maker is executing...
BUILD FAILED
D:SOFTWAREAndroidTestBoundbuild.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文件中。
有没有解决这个问题的方法?
标准的Java类加载器无法处理递归JAR(即捆绑在其他JAR中的JAR)。
本页列出了几个解决方案:http://www.jdotsoft.com/JarClassLoader.php
请让我知道哪一个为你工作。
链接地址: http://www.djcxy.com/p/44395.html上一篇: java.lang.NoClassDefFoundError, Ant task could not see classes in jar inside jar