在ant中设置javaagent
我正在尝试从Ant脚本运行JUnit测试。测试使用JMockit模拟框架,对于Java5,需要将其指定为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"
<!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>