2012-07-11 121 views
0

我的問題是通過ant從父目錄運行PigUnit。在Ant子目錄中運行PigUnit

我正在使用PigUnit示例直接從PigUnit網站。

我使用Ant腳本是在這裏:如果我在該項目的工作目錄運行ant

<junit printsummary="on" fork="true" haltonfailure="yes"> 
     <jvmarg value="-Duser.dir=${basedir}"/> 

     <classpath refid="junit.class.path" /> 
     <formatter type="xml" /> 
     <batchtest todir="${test.report.dir}"> 
      <fileset dir="${test.dir}"> 
       <include name="**/*Test*.java" /> 
      </fileset> 
     </batchtest> 
    </junit> 
</target> 

這個腳本工作完全正常。然而,當我遠程調用這一行代碼的腳本Ant構建腳本在豬項目的父目錄

<ant dir="${pig.dir}" target="main" inheritall="false" antfile="build.xml"/> 

我得到一個FileNotFoundException異常:

java.io.FileNotFoundException">java.io.FileNotFoundException: top_queries.pig (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at org.apache.pig.pigunit.PigTest.readFile(PigTest.java:273) at org.apache.pig.pigunit.PigTest.readFile(PigTest.java:269) at org.apache.pig.pigunit.PigTest.<init>(PigTest.java:92) at TopQueriesTest.testTop2Queries(Unknown Source)

同樣的FNF異常也發生如果我從父目錄中的命令行運行ant: ant -f PigJavaTest/build.xml junit

我的解決方法幫助PigUnit查找top_queries.pig文件以指定top_queries.pig文件相對於Pig項目的父目錄的位置,例如

PigTest test = new PigTest("PigTestJava/top_queries.pig", args);

而是因爲它從父一個不同的目錄中運行ant下破壞這並不是最佳選擇。

其他JUnit測試將從父目錄正常運行,但PigUnit始終引發相同的FNF異常。我也試着用PigServer做一個簡單的測試(加載/轉儲文件),並且PigServer測試的行爲就像PigUnit一樣。

爲什麼從父目錄調用ant時拋出FileNotFoundException異常,我該如何解決?

回答

0

你有一個相對於你的豬檔案的路徑。所以如果你從項目的工作目錄調用ant腳本,它應該可以工作。當您從父項目調用ant腳本時,現在相對路徑是相對於父目錄的。

當你調用此Ant任務

,你是正確設置目錄屬性,但僅更改$ {BASEDIR}屬性的值,爲後續的腳本,而不是實際junit任務運行時的工作目錄。

我建議你使用dir屬性,在junit任務硬設置工作目錄(我想這就是你想要什麼用jvmarg選項做):

<junit printsummary="on" fork="true" haltonfailure="yes" dir="${basedir}"> 
    <jvmarg value="-Duser.dir=${basedir}"/> 

    <classpath refid="junit.class.path" /> 
    <formatter type="xml" /> 
    <batchtest todir="${test.report.dir}"> 
     <fileset dir="${test.dir}"> 
      <include name="**/*Test*.java" /> 
     </fileset> 
    </batchtest> 
</junit> 

詳情請參閱http://ant.apache.org/manual/Tasks/junit.html

+0

將dir屬性添加到junit工作!改變$ {basedir}屬性和更改工作目錄之間的區別是關鍵;子版本現在使用它自己的文件夾作爲工作目錄,而不管從哪裏調用子版本。非常感謝你! – user847352 2012-07-13 01:23:04