【问题标题】:Ant can't find an ant class (DateUtils) while buildingAnt 在构建时找不到 ant 类 (DateUtils)
【发布时间】:2013-01-25 13:47:28
【问题描述】:

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

【问题讨论】:

    标签: ant jaxb classpath


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有时我会使用这个: jarfinder

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

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

      【讨论】:

      • 我指出:“它找不到的类 (DateUtils) 在 ant.jar 本身内”。该类在 ant.jar 中。我知道。
      • 您是否有可能意外拥有一些非常旧的?我想这值得检查。如果它是旧的,你可以尝试用最新的从这里安全地替换(通过将当前保存在其他地方):ant.apache.org/bindownload.cgi
      • 我不这么认为。我在机器上发现了两个安装的 ant。两者都是 1.7.1,并且这两个 ant.jar 文件都包含 DateUtils。
      • 那不是太老了,如果你不是不小心打错了东西,我没有别的想法。祝你好运找到解决方案
      【解决方案3】:

      用这样的东西运行 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

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多