让同学们和蚂蚁一起工作



我们正在开发一个java项目,我们使用ant来构建和运行程序。现在我们正在做一些性能测试,我们想使用classmexer。问题是我们不能让同学们一起工作。

因为必须向jvm传递参数

-javaagent:classmexer.jar

我们在build.xml

中尝试了以下操作
<target name="run" description="Try running it." depends="all">
    <java jvmargs="-javaagent:classmexer.jar" jar="${OUT_DIR}/${FILE_NAME}.jar" failonerror="true" fork="true">
    </java>
</target>

但它不起作用。在运行时,程序抛出以下异常

java.lang.IllegalStateException: Agent not initted
          at com.javamex.classmexer.Agent.getInstrumentation(Agent.java:33)
          at com.javamex.classmexer.MemoryUtil.deepMemoryUsageOf(MemoryUtil.java:104)
          at com.javamex.classmexer.MemoryUtil.deepMemoryUsageOf(MemoryUtil.java:80)
          at output_archive.test.provaJDOM.main(provaJDOM.java:55)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:616)
          at com.sun.star.lib.loader.Loader.main(Loader.java:141)
MemoryUtil.deepMemoryUsageOf(Object)调用 时

因此,这似乎不是传递参数给jvm的正确方式,但我们不知道该怎么做。

谢谢你的帮助:)

我认为您可能成功地传递了JVM参数-您可以尝试使用-verbose运行ant来确认。这个问题似乎与jar属性的使用有关。

根据Ant java任务文档(另见):

当您使用此选项时,JAR文件是所有用户的源文件类和其他用户类路径设置将被忽略。

因此,您必须确保classmerer .jar类包含在应用程序jar中才能找到它们。

还有一点:不推荐使用jvmargs属性-您应该使用嵌套的jvmarg元素。

您可能会考虑的一种方法是将您的应用程序jar添加到类路径中(以及classmerer .jar),并直接调用jar清单中指定的主类。像这样:

<java classname="...YourMainClass" failonerror="true" fork="true">
    <jvmarg value="-javaagent:classmexer.jar" />
    <classpath>
        <!-- other stuff here maybe -->
        <pathelement location="path_to_classmexer/classmexer.jar" />
        <pathelement location="${OUT_DIR}/${FILE_NAME}.jar" />
    </classpath>
</java>

相关内容

  • 没有找到相关文章