Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ant中设置javaagent_Java_Ant_Junit_Jmockit - Fatal编程技术网

在ant中设置javaagent

在ant中设置javaagent,java,ant,junit,jmockit,Java,Ant,Junit,Jmockit,我正在尝试从Ant脚本运行JUnit测试。测试使用JMockit模拟框架,对于Java5,需要将其指定为javaagent才能正确运行。以下是我正在运行的脚本: <!DOCTYPE project> <project name="junit_test"> <property name="PROJECT_PATH" value="{Path to my eclipse project}" /> <property name="LIB_PATH"

我正在尝试从Ant脚本运行JUnit测试。测试使用JMockit模拟框架,对于Java5,需要将其指定为javaagent才能正确运行。以下是我正在运行的脚本:

<!DOCTYPE project>
<project name="junit_test">
   <property name="PROJECT_PATH" value="{Path to my eclipse project}" />
   <property name="LIB_PATH" value="${PROJECT_PATH}/WebContent/WEB-INF/lib" />
   <property name="TEST_PATH" value="WebContent/WEB-INF/classes" />

   <target name="run_junit">
      <junit fork="yes" forkmode="once" printsummary="true">
         <jvmarg value="-javaagent:${LIB_PATH}/jmockit.jar" />

         <classpath path="${LIB_PATH}/jmockit.jar" />
         <classpath path="${LIB_PATH}/junit-4.8.2.jar" />

         <batchtest>
            <fileset dir="${TEST_PATH}">
               <include name="**/*Test.class"/>
            </fileset>
         </batchtest>
      </junit>

      <junitreport todir="/junitOut">
         <fileset dir="/junitOut">
            <include name="INCOMPLETE-*.xml"/>
            <include name="TEST-*.xml"/>
         </fileset>
      <report todir="/junitOut/html"/>
   </junitreport>
</target>
</project>

我的javaagent设置正确吗?如果是,还有什么可能导致此错误?

我不知道这是否是解决方案,但您没有正确设置类路径。试试这个:

<classpath>
    <pathelement location="${LIB_PATH}/jmockit.jar" />
    <pathelement location="${LIB_PATH}/junit-4.8.2.jar" />
</classpath>

您的
jvmarg
Ant
javaagent
看起来是正确的。您使用的是Java 6还是支持附加API的JVM?看起来您还必须传递
-Dcom.sun.management.jmxremote
,才能在旧版本的Java中启用它。我假设您需要它,因为异常显示“目标VM不支持附加机制”


对于IBM JDK 6,您似乎需要指定
-Dcom.IBM.tools.attach.enable=yes

,这并没有解决问题,但感谢您提供的指针。我仍然在了解Ant。@MichaelK你知道如何添加javaagent吗?我尝试了你的建议,但它并没有改变我的输出。奇怪的是,我可以用Eclipse的JUnit runner运行测试,它可以很好地与javaagent配合使用。继续查找…堆栈跟踪引用了
J9VMInternals
,这似乎意味着您正在使用IBM JDK?可能该版本不支持Attach API,而您正在为Eclipse使用不同的JDK。我现在推荐Sun(Oracle)JDK 6,它是更新最快的。从技术上讲,我拥有的Eclipse是IBM的Rational Application Developer:)我不知道它是否支持附加API,但我必须在JUnit运行配置中使用javaagent,所以可能不支持。这个IBMJDK应该与Java6兼容。不幸的是,出于业务原因,切换不是一个选项。看起来您可能需要
-Dcom.ibm.tools.attach.enable=yes
来启用ibm JDK 6的附加API。我使用-v运行ant,得到了“无法从资源org/apache/tools/ant/antlib.xml加载定义”。这跟这事有关系吗?我现在没有得到junitreport输出,但这似乎没有关系,因为orig代码没有发生任何变化。
<classpath>
    <pathelement location="${LIB_PATH}/jmockit.jar" />
    <pathelement location="${LIB_PATH}/junit-4.8.2.jar" />
</classpath>