2

我正在尝试通过 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-code-generation 目标中,并在它调用简单的 ant 复制方法时发生。它找不到的类(DateUtils)在 ant.jar 本身中,我不知道如何让它为这个目标加载 ant.jar(我原以为已经有了可用的 ant.jar因为它在 ant 中运行)。我知道这是一个类路径问题,但不知道如何解决它。

这是 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 方法,并且在单独运行时效果很好。

4

3 回答 3

2

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

于 2013-05-06T17:58:22.703 回答
0

有时我使用这个: jarfinder

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

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

于 2013-01-25T14:13:46.263 回答
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>

对我来说完美无缺。 在这里找到

于 2015-09-17T12:59:33.253 回答