Java NoClassDefFoundError,Ant任务无法在jar内的jar中看到类

Java NoClassDefFoundError,Ant任务无法在jar内的jar中看到类,java,ant,jar,Java,Ant,Jar,我编写了Java工具(在本例中是iOffloadMaker),它还包含自己定义的Ant任务,作为使用Ant启动工具的主启动器。我将所有外部jar库捆绑到工具的jar中。我还提供了一个简单的Ant build.xml文件来启动我的工具: <?xml version="1.0"?> <project name="TestBound" default="main" basedir="."> <!-- Sets varables which can later be

我编写了Java工具(在本例中是iOffloadMaker),它还包含自己定义的Ant任务,作为使用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任务无法在我的工具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)
D:\SOFTWARE\Android\TestBound>ant-modify
构建文件:D:\SOFTWARE\Android\TestBound\build.xml
修改:
[iOffloadMaker]卸载生成器正在执行。。。
构建失败
D:\SOFTWARE\Android\TestBound\build.xml:40:java.lang.NoClassDefFoundError:org/
xmlpull/v1/XmlPullParserException
在com.richardle.ioffload.offloadmaker.ApplicationProject上
(项目:java:30)
在com.richardle.ioffload.offloadmaker.offloadmaker.execute(offloadmaker
.java:121)
在com.richardle.ioffload.OffloadMakerTask.execute(OffloadMakerTask.java
:26)
位于org.apache.tools.ant.UnknowneElement.execute(unknowneElement.java:292)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl。
爪哇:57)
我确信所有必要的lib都被捆绑到iOffloadMaker.jar中。问题是Ant任务加载器无法在我的jar文件中看到依赖项jar类

若我并没有将所有依赖项捆绑到jar中,而是将它们和iOFfloadMaker.jar一起放在依赖项文件夹中,那个么它就会像我所期望的那个样工作。但我想将所有依赖项和工具源代码捆绑到一个交付jar文件中


这个问题有解决方案吗?

标准Java类加载器无法处理递归JAR(即捆绑在其他JAR中的JAR)

本页列出了几种解决方案:


请告诉我哪一个适合你。

相关问题:@Aarondigula:谢谢,我使用了JarClassLoader,它适合我使用JarClassLoader类,它很有魅力。非常感谢您的快速回复。