Ant在构建时找不到ant类(DateUtils)

时间:2013-01-25 13:47:29

标签: ant jaxb classpath

我正在尝试通过ant构建一个项目。它在我的本地机器上通过ant构建得很好,但是在我的构建机器上我得到了:

java.lang.NoClassDefFoundError: org/apache/tools/ant/util/DateUtils
    at org.apache.tools.ant.DefaultLogger.formatTime(DefaultLogger.java:323)
    at org.apache.tools.ant.DefaultLogger.buildFinished(DefaultLogger.java:170)
    at org.apache.tools.ant.Project.fireBuildFinished(Project.java:        
    at org.apache.tools.ant.Main.runBuild(Main.java:778)
    at org.apache.tools.ant.Main.startAnt(Main.java:217)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.util.DateUtils
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)

这发生在jaxb代码生成目标中,并在调用简单的ant copy方法时发生。它找不到的类(DateUtils)在ant.jar本身内,我无法弄清楚如何为它加载ant.jar(我原本认为已经有了ant.jar)因为它在蚂蚁中运行)。我知道这是一个类路径问题,但无法弄清楚如何修复它。

这是ant构建文件的一部分,直到副本失败:

<target name="jaxb-code-generation" depends="xjc-typedef-target,-do-init,-init-macrodef-javac">
    <mkdir dir="${build.generated.sources.dir}/jaxb" xmlns:s="http://xml.netbeans.org/schema/JAXBWizConfig"/>
    <mkdir dir="build/generated/jaxbCache" xmlns:s="http://xml.netbeans.org/schema/JAXBWizConfig"/>
    <mkdir dir="build/generated/jaxbCache/Listing"/>
    <xjc package="Listing" destdir="build/generated/jaxbCache/Listing" catalog="catalog.xml">
        <classpath>
            <pathelement location="${src.dir}"/>
            <pathelement path="${jaxbwiz.xjcrun.classpath}"/>
        </classpath>
        <arg value="-xmlschema"/>
        <schema file="xml-resources/jaxb/Listing/Listing.xsd"/>
        <depends file="xml-resources/jaxb/Listing/Listing.xsd"/>
        <produces dir="build/generated/jaxbCache/Listing"/>
    </xjc>
    <copy todir="${build.generated.sources.dir}/jaxb">
        <fileset dir="build/generated/jaxbCache/Listing"/>
    </copy>

同样,这在我的本地机器上运行良好。我的本地机器和构建机器都运行Java 1.6和Ant 1.7.1,两者都是linux(我的是Linux Mint,构建机器是Ubuntu)。

更新:数据点:我创建了一个只复制文件的新build.xml,就是这样。它使用相同的ant方法,并且在单独运行时工作正常。

3 个答案:

答案 0 :(得分:1)

我在同样的构建问题中遇到了同样的问题(至少相同的错误)。 对我有用的解决方案就是设置ANT_HOME环境变量。 这似乎是不必要的,因为蚂蚁在PATH中,所以我希望它能找到所需的一切,但似乎没有。当我将ANT_HOME设置为正确的路径时,然后构建相同的项目。

答案 1 :(得分:0)

有时候我用这个: jarfinder

您可以查看org / apache / tools / ant / util / DateUtils

我不确定你错过了什么,但也许有助于猜测。

答案 2 :(得分:0)

使用以下内容运行xjc native:

<target name="xjc">
    <exec executable="xjc">
        <arg value="-d"/>
        <arg value="src"/>
        <arg value="-p"/>
        <arg value="bla.bla.bla"/>
        <arg value="${xjc.in.dir}/bla.xsd"/>
    </exec>
</target>

对我而言完美无瑕。 found here