2013-05-10 132 views
1

在我當前的項目中,我正在使用junit測試。在我的本地電腦上運行我的ant文件會生成我的測試報告,但是當竹子試圖運行我的測試時,它會生成以下輸出。運行junit任務時,竹螞蟻任務失敗

我的錯誤是什麼?

SimplerTest.java

import static org.junit.Assert.*; 

import org.junit.Test; 

public class SimplerTest { 


@Test 
public void dummerTest() 
{ 
    assertTrue(true); 
} 
} 

本地輸出:

Buildfile: C:\Users\jussi\git\kingdom-builder-repository\build.xml 

compile-test: 
[javac] Compiling 1 source file to C:\Users\jussi\git\kingdom-builder-repository\bin 

junit: 
    [junit] Running me.jussi.kingdombuilder.SimplerTest 
    [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0,062 sec 

main: 

BUILD SUCCESSFUL 
Total time: 1 second 

服務器輸出:

compile-test: 
[javac] Compiling 1 source file to /var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin 

junit: 

BUILD FAILED 
/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/build.xml:108: Using loader AntClassLoader[/opt/apache-ant-1.9.0/lib/ant-launcher.jar:/opt/ant/lib/ant.jar:/opt/ant/lib/ant-junit.jar:/opt/ant/lib/ant-junit4.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/kingdom-builder/libs/junit-4.10.jar:/var/atlassian/application-data/bamboo/xml-data/build-dir/KB-KBP1-JOB1/bin] 
on class org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter: java.lang.NoClassDefFoundError: junit/framework/TestListener 

的build.xml

<?xml version="1.0"?> 
<project name="KingdomBuild" default="main" basedir="."> 
<!-- Sets variables which can later be used. --> 
<!-- The value of a property is accessed via ${} --> 

<property name="test.src.dir" location="kingdom-builder/test" /> 
<property name="build.dir" location="bin" /> 
<property name="test.report.dir" location="testreport" /> 

<!-- Define the classpath which includes the junit.jar and the classes after compiling--> 
<path id="junit.class.path"> 
    <pathelement location="kingdom-builder/libs/junit-4.10.jar" /> 
    <pathelement location="${build.dir}" /> 
</path> 

<!-- Compiles the java code (including the usage of library for JUnit --> 
<target name="compile-test"> 
    <javac srcdir="${test.src.dir}" destdir="${build.dir}" includeantruntime="false"> 
     <classpath refid="junit.class.path" /> 
    </javac> 
</target> 


<!-- Run the JUnit Tests --> 
<!-- Output is XML, could also be plain--> 
<target name="junit" depends="compile-test"> 
    <junit printsummary="on" fork="true" haltonfailure="true"> 
     <classpath refid="junit.class.path" /> 
     <formatter type="xml" /> 
     <batchtest todir="${test.report.dir}"> 
      <fileset dir="${build.dir}"> 
       <include name="**/*Test*.class" /> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 

<target name="main" depends="junit"> 
    <description>Main target</description> 
</target> 
</project> 

螞蟻-v輸出:

http://nopaste.info/1abdd27a8e.html

+0

這是Bamboo服務器的所有日誌記錄嗎? 'NoClassDefFoundError'主要是因爲沒有找到其他類或者無法運行其靜態代碼,所以在日誌中出現的錯誤或以前的異常的實際堆棧跟蹤會幫助很多。你能以某種方式運行詳細日誌記錄的螞蟻生成? – JBert 2013-05-10 13:54:23

+0

我在問題的末尾添加了ant -v的輸出。 – jussi 2013-05-10 14:54:25

回答

4

感謝您的冗長的Ant輸出。

看起來您正在Bamboo服務器上運行Ant 1.9.0。有一個已知的問題在Ant bug跟蹤系統,這是上發起一個類似的問題的海報SO(錯誤54835 - Classpath use seems to be broken in junit ant task?):「Class not found with Ant, Ivy and JUnit - error in build.xml?」:

BUILD FAILED 
/home/andrew/project/guice/hg/build.xml:33: java.lang.NoClassDefFoundError: junit/framework/TestListener 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
... 
     at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
     at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
... 

這個問題並沒有一個明確的/簡答題,但bug報告做:

它看起來像類搜索被委託給系統的 類加載器,而不是由Ant的類加載器被處理(在 系統類加載器沒有的JUnit knoweldge因爲JUnit是不在 核心Ant類路徑上,但被添加到JUnit任務中由艾維)。假設有一些 JUnit類必須已經加載到這個點,那麼Ant類加載器可以看到由Ivy加載的JUnit jar,但是在嘗試使用 加載由JUnit Runner使用的類時,Split Classloader似乎不正確地委託。

換句話說:Ant的JUnit任務有錯誤,並且無法正常工作,我認爲您受此特定錯誤的影響。錯誤報告的推移並列出這些修復/解決方法:

  • 等待螞蟻1.9.1(錯誤報告被標記爲固定和釋放,可以預計很快)
  • 您的JUnit JAR複製到您的ANTLIB目錄並繼續使用Ant 1.9.0。如果你想混合使用JUnit版本,這並不是很好,但如果你使用的是4.10左右,它應該可以工作。
  • 使用螞蟻1.8.4
+0

不錯。謝謝。我切換回Ant 1.8.4。 – jussi 2013-05-10 20:42:38