在ant junit任务中更改工作目录

时间:2010-12-06 13:26:00

标签: java ant junit hudson

我有一个运行JUnits测试的ant文件。这些测试依赖于某些配置文件的相对路径。我试图为批量测试设置工作目录,但是失败了。

我希望工作目录为${plugins.dir}/${name}

蚂蚁脚本的JUnit部分:

<junit haltonfailure="no" printsummary="on" fork="true" showoutput="true" dir="${plugins.dir}/${name}">
    <jvmarg value="-Duser.dir=${plugins.dir}/${name}"/>
    <classpath> 
        <path refid="project.classpath"/>
        <pathelement location="${plugins.dir}/${dependency}/@dot/"/>
        <pathelement location="${plugins.dir}/${name}/" />
    </classpath>
    <formatter type="xml" />
    <sysproperty key="basedir" value="${plugins.dir}/${name}"/>
    <sysproperty key="dir" value="${plugins.dir}/${name}"/>
    <batchtest todir="${junit.output}">
        <fileset dir="${dir}"> 
            <include name="**\*AllTests.class" />
        </fileset>
    </batchtest>
</junit>

我用Google搜索和搜索,但我找到的解决方法是设置“dir”,“sysproperty”或“jvmarg”。正如你所看到的,我已经尝试了所有这些:)

有没有办法在标签中打印当前目录?它不支持。这将允许我验证目录是否实际改变了什么。

这个等式中的一个通配符是,这是在Hudson中运行的,它启动了一个启动antrunner的eclipse进程。这样我们就可以运行junit和eclipse插件junit测试。我认为不应该与这个问题有任何关系。

3 个答案:

答案 0 :(得分:5)

我认为你设置basedir属性是正确的(见projects attributes)。但是,由于它是ANT(而不是JVM)的属性,因此它只是READ!{/ p>

如果在调用ant任务时设置basedir,它会影响其他目标吗?请参阅Command Line reference

ant -Dbasedir=somedir

或者,跨越一个新的ant进程来调用你的junit目标。请参阅AntCall taskAnt task。以下示例假定junit目标包含您的junit任务。我将此任务用于其他属性(到目前为止从未需要basedir属性。

<antcall target="junit">
  <param name="basedir" value="${plugins.dir}/${name}"/>
</antcall>

<ant dir="${plugins.dir}/${name}" target="junit" />

答案 1 :(得分:5)

我有相同的情况,在我的情况下,我看到dir="...."如果在同一个jvm中运行则被忽略,所以我只是添加了fork='true'并且它有效。

引用Apache的文档站点“ dir - 调用VM的目录。如果禁用fork,则忽略。”。更多here

答案 2 :(得分:1)

我正在使用NetBeans。当我添加到Ant属性(来自Tools,Options,Java,Ant)work.dir=C:/MyWorkingDir/时,它使用以下命令执行ant并将工作目录更改为C:\MyWorkingDir

ant -f D:\\workspace\\lib\\project -Dfork=true -Djavac.includes=com/myapp/MyTest.java -Dtest.includes=com/myapp/MyTest.java "-Dwork.dir=C:/MyWorkingDir/" test-single