我正在尝试通过 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 方法,并且在单独运行时效果很好。