junit—使用ant在子目录中运行pigunit

mklgxw1f  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(415)

我的问题是通过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,我如何修复它?

owfi6suc

owfi6suc1#

你有一个到你的pig文件的相对路径。因此,如果从项目的工作目录调用ant脚本,它应该可以工作。从父项目调用ant脚本时,相对路径现在是相对于父目录的。
http://ant.apache.org/manual/tasks/ant.html
在这里调用ant任务时,您正确地设置了dir属性,但这只会更改后续脚本的${basedir}属性的值,而不会更改junit任务运行时的实际工作目录。
我建议您在junit任务中使用dir属性来硬设置工作目录(我猜这就是您试图使用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 更多细节

相关问题