【问题标题】:java.lang.NoClassDefFoundError, Ant task could not see classes in jar inside jarjava.lang.NoClassDefFoundError,Ant 任务在 jar 中看不到 jar 中的类
【发布时间】:2014-05-13 09:07:09
【问题描述】:

我写了一个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:\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 任务加载器在我的 jar 文件中看不到依赖 jar 的类。

如果我没有将所有依赖项捆绑到 jar 中,而是将它们与 iOFfloadMaker.jar 一起交付到依赖项文件夹中,它会按我的预期工作。但我想将所有依赖项和我的工具源代码捆绑到一个交付 jar 文件中。

这个问题有解决办法吗?

【问题讨论】:

标签: java ant jar


【解决方案1】:

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

此页面列出了一些解决方案:http://www.jdotsoft.com/JarClassLoader.php

请告诉我哪一个适合你。

【讨论】:

  • 我使用 JarClassLoader 类,它很有魅力。非常感谢您的快速回复。
猜你喜欢
  • 2013-06-30
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多