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

下一篇: Modifying behaviour of default classloader in Java