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



当我通过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参数定义任何限制。

junit ant任务的文档显示:

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

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

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

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

我还建议使用"一次"的分叉模式;这将大大提高性能。

试试这个:

<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属性。根据需要调整该值。

相关内容

  • 没有找到相关文章

最新更新