【问题标题】:How do I set the working directory for the Ant 'junit' task?如何设置 Ant 'junit' 任务的工作目录?
【发布时间】:2009-01-21 20:42:43
【问题描述】:

我的 Ant 构建包含一个运行一些测试的 junit 任务。为了使测试正常工作,必须更改指定当前工作目录 (user.dir) 的属性值,但我不确定如何实现。

目前有问题的任务如下所示:

<junit printsummary="withOutAndErr" fork="true"
           haltonfailure="yes" showoutput="true"
           filtertrace="false" dir="C:/workspace/obp-web">
    <jvmarg value="-Duser.dir=C:/workspace/obp-web"/>

    <classpath>
        <fileset dir="${web.lib.dir}" includes="**/*.jar"/>
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </classpath>    
    <batchtest fork="no" todir="${web.build.dir}/testresults">
        <formatter type="xml"/>
        <zipfileset src="${web.build.dir}/test-obp-web.jar">
            <include name="**/*Test.class"/>
        </zipfileset>           
    </batchtest>
</junit>

请注意,我尝试使用“dir”属性和“jvmarg”任务将工作目录更改为 C:/workspace/obp-web。但是,当我在打开详细输出的情况下运行 Ant 时,我看到以下输出,这表明工作目录尚未正确设置:

[junit] 如果在同一 VM 中运行,则忽略 dir 属性

[junit] 使用系统属性 {java.runtime.name=Java(TM) SE 运行时 环境, sun.boot.library.path=c:\jdk6\jre\bin, java.vm.version=10.0-b23, ant.lib rary.dir=C:\java\apache-ant-1.7.0\lib, java.vm.vendor=Sun Microsystems Inc., java.vendor.url=http://java.sun.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 客户端虚拟机, file.encoding.pkg=sun.io, user.country=CA, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=服务包 1, java.vm.specification.name=Java 虚拟机规范, user.dir=c:\workspace\obp-ear,java.runtime.version=1.6.0_07-b06, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorse d.dirs=c:\jdk6\jre\lib\认可, os.arch=x86, java.io.tmpdir=C:\Users\donal\AppData\Local\Temp\, line.separator=

【问题讨论】:

    标签: java ant junit


    【解决方案1】:

    使用属性“dir”(也必须 fork vm):

    http://ant.apache.org/manual/Tasks/junit.html

    【讨论】:

    • 我试过了,但没有运气。我已经用信息更新了原始项目。
    • 比凯文的“正确”答案要好得多。
    【解决方案2】:

    尝试使用 jvmarg:

    <junit fork="yes">
      <jvmarg value="-Duser.dir=somedir"/>
      ...
    </junit>
    

    请注意,junit 标记和 batchtest 标记上的 fork 必须 都为真,就像 batchtest 标记一样覆盖来自 junit 的值。 Jvmargs 仅在 junit fork 一个新的 JVM 时才有效。

    【讨论】:

    • 我试过了,但没有运气。我已经用信息更新了原始项目。
    • 您不能通过设置 user.dir 来更改 Java 中的当前工作目录。更改该系统属性被视为用户错误。
    • @David 这是真的,但我们正在指示 junit 使用该 user.dir 属性创建一个新的 JVM,而不是在正在运行的 JVM 中修改该属性
    • 不要使用这个。它使本机工作目录与属性不一致。因此像 somefile.isFile() != somefile.getAbsoluteFile().isFile() 这样的奇怪效果会发生。
    【解决方案3】:

    和你一样的问题。

    我通过将 batchtest fork 设置为 true 来解决它:

    batchtest fork="no" ..

    batchtest fork="yes" ..

    【讨论】:

      【解决方案4】:

      您尝试过路径元素位置吗?这对我有用。

        <classpath>
      <!-- filesets, etc. -->
      <pathelement location="C:/workspace/obp-web" />
        </classpath>
      

      【讨论】:

        猜你喜欢
        • 2011-05-20
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        相关资源
        最近更新 更多