我的问题是通过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\u querys.pig文件的变通方法是指定top\u querys.pig文件相对于pig项目父目录的位置,例如。 PigTest test = new PigTest("PigTestJava/top_queries.pig", args);
但这并不是最优的,因为当从不同于父目录的目录运行ant时,它会中断。
其他junit测试将从父目录正常运行,但pigunit总是抛出相同的fnf异常。我还试着用pigserver做一个简单的测试(加载/转储一个文件),pigserver测试的行为和pigunit一样。
为什么在从父目录调用ant时抛出这个filenotfoundexception,我如何修复它?
1条答案
按热度按时间owfi6suc1#
你有一个到你的pig文件的相对路径。因此,如果从项目的工作目录调用ant脚本,它应该可以工作。从父项目调用ant脚本时,相对路径现在是相对于父目录的。
http://ant.apache.org/manual/tasks/ant.html
在这里调用ant任务时,您正确地设置了dir属性,但这只会更改后续脚本的${basedir}属性的值,而不会更改junit任务运行时的实际工作目录。
我建议您在junit任务中使用dir属性来硬设置工作目录(我猜这就是您试图使用jvmarg选项所做的):
看到了吗http://ant.apache.org/manual/tasks/junit.html 更多细节