我的问题是通过 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)
如果我从父目录中的命令行运行 ant,也会发生同样的 FNF 异常:
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,我该如何解决?