2013-01-25 196 views
1

我想通過螞蟻建立一個項目。它建立通過螞蟻就好了我的本地機器上,但我們的構建機器上我得到:螞蟻無法找到一個螞蟻類(DateUtils),而建設

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的代碼生成目標之內,當它調用一個簡單的螞蟻複製方法發生。它無法找到的類(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方法,並且在單獨運行時工作得很好。

回答

0

有時候我用這個: jarfinder

您可以檢查組織/阿帕奇/工具/ ANT/UTIL/DateUtils

我不知道你錯過了,但也許有助於猜測。

+0

我解決了這個問題:「它找不到的類(DateUtils)在ant.jar本身中」。這個類在ant.jar中。我知道。 –

+0

難道你有可能會有一些很老的嗎?我想它值得檢查。如果它是舊的,你可以嘗試安全地更換(通過保存其他地方的當前)與最新的一個從這裏:http://ant.apache.org/bindownload.cgi – CsBalazsHungary

+0

我不這麼認爲。我在機器上發現了兩個安裝螞蟻。兩者都是1.7.1,這兩個ant.jar文件都包含DateUtils。 –

1

我有這個相同的問題(相同的錯誤,至少)在什麼似乎是一個相關的生成問題。 爲我工作的解決方案只是設置ANT_HOME環境變量。 這似乎是不必要的,因爲ant在PATH中,所以我期望它能找到它需要的一切,但它似乎不是。當我將ANT_HOME設置爲正確的路徑時,就會生成相同的項目。

0

運行的東西XJC原生這樣的:

<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