2013-04-14 61 views
2

基本上,當我執行命令ant -f mybuild.xml clean junit-TestRunner,我得到很多的錯誤在我的Java文件,它給JUnit的進口這樣的錯誤:有問題,編譯Java文件(ANT和XML相關)

java:6: error: package org.junit does not exist 

這裏有一個我的XML文件的部分,在那裏它給了我錯誤的測試編譯:

<path id="test.classpath"> 
    <pathelement location="${build.test.dir}"/> 
</path> 

<target name="test-compile" depends="test-init"> 
     <javac srcdir="test" 
     destdir="build\test" 
     includeAntRuntime="No"/> 
</target> 

<target name="junit-TestRunner" depends="test-compile"> 
    <java classname="org.junit.runner.JUnitCore" 
     classpathref="C:\junit-4.10"> 
    <arg value="org.example.antbook.junit.SimpleTest"/> 
    </java> 

    <java classname="org.junit.runner.JUnitCore" 
     classpathref="test.classpath"> 
    <arg value="org.eclipseguide.persistence.FilePersistenceServicesTest"/> 
    </java> 
</target> 

我認爲它無法找到我的地方的junit-4.10.jar文件所在的目錄。我在'classpathref'中改變了它,但仍給我同樣的錯誤。

有什麼建議嗎?

+0

嘗試將完整路徑添加到JAR文件,而不僅僅是它所在的目錄。 – NilsH

+0

你沒有在test-compile目標中的javac任務中設置任何類路徑,所以顯然,JUnit導入無法解析,因爲junit jar不在類路徑中。 –

+0

@JB - 是的我試過把我的目錄'C:\ junit-4.10'放入Junit-TestRunner的classpathref中,但仍給我同樣的錯誤。 – user11998

回答

0

我懷疑這一點:

classpathref="C:\junit-4.10" 

應指向一個jar文件或以上下類子目錄。

+0

嗨,布賴恩,是的,我已經試過把所有的classpadref,但仍然給我同樣的錯誤。 – user11998

0

您是否檢查過this page上的第二個「note」?我認爲最簡單的方法是#1,將這些JAR放在${ANT_HOME}/lib文件夾中。這樣你就不必指定任何類路徑。

0

將以下目標添加到您的版本。

<target name="bootstrap" description="Install build dependencies"> 
    <mkdir dir="${user.home}/.ant/lib"/> 
    <get dest="${user.home}/.ant/lib/junit.jar" src="http://search.maven.org/remotecontent?filepath=junit/junit/4.11/junit-4.11.jar"/> 
</target> 

這將安裝JUnit的jar放到對第三方的依賴ANT標準的地區之一。

1

請勿將junit.jar放入您的$ANT_HOME。如果你這樣做,當你安裝一個新版本的Ant時,或者如果有其他人檢出這個文件,你將會導致問題。這是你的問題:

<target name="junit-TestRunner" depends="test-compile"> 
    <java classname="org.junit.runner.JUnitCore" 
     classpathref="C:\junit-4.10"> 
     <arg value="org.example.antbook.junit.SimpleTest"/> 
    </java> 

一個classpathref參考到類路徑。它是單獨定義的,它不是一個jar或目錄。

例如,之前我打電話給我<java>任務,我首先定義了我的類路徑參考:

<classpath id="test.classpath"> 
    <pathelement path="C:/junit-4.10"/> 
</classpath> 

這定義了參考對這個classpath叫test.classpath

<target name="junit-TestRunner" depends="test-compile"> 
    <classpath id="test.classpath"> 
     <pathelement path="C:/junit-4.10"/> 
    </classpath> 

    <java classname="org.junit.runner.JUnitCore" 
     classpathref="test.classpath"> 
     <arg value="org.example.antbook.junit.SimpleTest"/> 
    </java> 

你可以做的另一件事是簡單地包括classpath,所以你不必擺在首位,以確定它的一個引用:

<target name="junit-TestRunner" depends="test-compile"> 
    <java classname="org.junit.runner.JUnitCore"> 
     <arg value="org.example.antbook.junit.SimpleTest"/> 
     <classpath> 
      <pathelement path="C:/junit-4.10"/> 
     </classpath> 
    </java> 
現在,您可以在您的 <java>任務中使用它

順便說一句,避免反斜槓。它可能會導致問題,因爲它有時可以用作引用字符。相反,使用正如我在上面所做的正斜槓。

+0

這種方法的問題是讓你的'build.xml'系統依賴。如果其他人檢查了這段代碼並嘗試運行測試,那麼很可能會失敗,因爲他/她的系統上沒有'C:\ junit-4.10'。 – Cebence

+0

@Cebence你絕對正確。最好將junit.jar放入項目中。更好的是,在Ant中使用Ivy,並將其從Maven存儲庫中提取出來。在這一點上,我不想進入這一點。然而,如果你把'junit.jar'放在你的'$ ANT_LIB'中,情況就更糟了。這使得需要'junit.jar'完全不可見。你現在必須弄清楚爲什麼它在Bob的機器上工作,但不是Mark的機器。至少這樣,你會發現你需要JUnit-4.10作爲構建的一部分。 –