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 を作成しました。それだけです。同じアリの方法を使用し、ソロで実行するとうまくいきました。

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 に答える