将参数从build.xml传递到java文件

时间:2011-07-01 07:39:36

标签: java ant junit

当我通过传递参数

通过eclipse运行java测试文件(单个文件)时
  

-DappRoot = ECM -DappName = ESW -Dapp.module = FNT -Dapp.env = LOC -DcloneNumber = 1

测试文件执行没有错误,如果我不给出参数错误发生,因为无法解决占位符'appRoot'。

我有junit目标以html格式生成报告。

<target name="junit" depends="init-junit">
        <junit printsummary="on" fork="yes" forkmode="perBatch" haltonfailure="false" failureproperty="junit.failure" showoutput="false">           
            <classpath>
                <path refid="CLASSPATH_JUNIT"/>             
            </classpath>            
            <batchtest fork="no"  todir="${TEST_BUILD_DIR}">
               <fileset dir="${COMP_TEST_SRC}">                           
                  <include name="**/*Test.java" />          
               </fileset>              
            </batchtest>
            <formatter type="xml" />
        </junit>        
        <junitreport todir="${JUNIT_REPORT}">
            <fileset dir="${TEST_BUILD_DIR}">
                <include name="TEST-*.xml" />           
            </fileset>       
            <report format="frames" todir="${JUNIT_REPORT}"/>       
        </junitreport>          
    </target>       

当我在构建脚本上面运行时,会出现以下错误:无法解析占位符'appRoot'作为参数传递的位置。

我已经通过eclipse将参数传递给build.xml,此参数传递给build.xml文件但不传递给java文件。我该如何解决这个问题?

修改 尝试使用以下参数:

<junit printsummary="on" fork="yes" forkmode="perBatch" haltonfailure="false" failureproperty="junit.failure" showoutput="false">           
    <jvmarg value="-DappRoot=ECM" />
    <jvmarg value="-DappName=ESW" />
    <jvmarg value="-Dapp.module=FNT" />
    <jvmarg value="-Dapp.env=LOC" />
    <jvmarg value="-DcloneNumber=1" />
    <!--<sysproperty key="appRoot" value="${appRoot}"/>
    <sysproperty key="appName" value="${appName}"/>
    <sysproperty key="app.module" value="${app.module}"/>
    <sysproperty key="app.env" value="${app.env}"/>
    <sysproperty key="cloneNumber" value="${cloneNumber}"/>-->
    <classpath>
        <path refid="CLASSPATH_JUNIT"/>             
    </classpath>

使用系统参数它工作正常但需要很长时间才能执行。与jvmarg它不起作用。与

相同的错误
 <jvmarg value="-DappRoot=${appRoot}" />

http://ant.apache.org/manual/Tasks/junit.html没有为sys和jvm args定义任何限制。

2 个答案:

答案 0 :(得分:1)

documentation of the junit ant task显示了它:

<junit fork="yes" ...>
    <jvmarg value="-DappRoot=ECM" />
</junit>

如果appRoot属性作为系统属性传递给ant,您可以将其作为ant属性访问:

<junit fork="yes" ...>
    <jvmarg value="-DappRoot=${appRoot}" />
</junit>

答案 1 :(得分:1)

您已在fork="no"元素中设置batchtest,这会覆盖fork元素中的junit设置。这导致junit任务在与蚂蚁进程相同的JVM中执行,这意味着jvmarg参数将被忽略。

我还建议使用“一次”的fork模式;这将大大提高性能。

试试这个:

<junit printsummary="on" fork="yes" forkmode="once" maxmemory="512m"
       haltonfailure="false" failureproperty="junit.failure"
       showoutput="false">           
    <jvmarg value="-DappRoot=ECM" />
    <jvmarg value="-DappName=ESW" />
    <jvmarg value="-Dapp.module=FNT" />
    <jvmarg value="-Dapp.env=LOC" />
    <jvmarg value="-DcloneNumber=1" />
    <classpath>
        <path refid="CLASSPATH_JUNIT"/>             
    </classpath>            
    <batchtest todir="${TEST_BUILD_DIR}">
       <fileset dir="${COMP_TEST_SRC}">                           
          <include name="**/*Test.java" />          
       </fileset>              
    </batchtest>
    <formatter type="xml" />
</junit>

请注意maxmemory属性。根据需要调整值。