私の問題は、親ディレクトリから ant を介して PigUnit を実行することです。
PigUnitのサイトから直接出てきた PigUnit の例を使用しています。
私が使用している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 を実行すると、このスクリプトは問題なく動作します。ただし、Pig プロジェクトの親ディレクトリにある 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 ファイルを見つけて、Pig プロジェクトの親ディレクトリに対する top_queries.pig ファイルの場所を指定できるようにするための私の回避策、たとえば
PigTest test = new PigTest("PigTestJava/top_queries.pig", args);
ただし、親ディレクトリとは異なるディレクトリから ant を実行すると壊れるため、これは最適ではありません。
他の JUnit テストは親ディレクトリから正常に実行されますが、PigUnit は常に同じ FNF 例外をスローします。また、PigServer (ファイルのロード/ダンプ) で簡単なテストを実行しようとしましたが、PigServer テストは PigUnit と同じように動作しました。
親ディレクトリから ant を呼び出すと、この FileNotFoundException がスローされるのはなぜですか? どうすれば修正できますか?