【问题标题】:Make classmexer and ant working together让classmexer和ant一起工作
【发布时间】:2011-08-06 11:08:48
【问题描述】:

我们正在开发一个 java 项目,我们使用 ant 来构建和运行该程序。现在我们正在做一些性能测试,我们想使用classmexer。问题是我们不能让 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的正确方法,但我们不知道该怎么做。

感谢您的帮助:)

【问题讨论】:

    标签: java ant profiling memory-management


    【解决方案1】:

    我认为您可能正在成功传递了 JVM arg - 您可以尝试使用 -verbose 运行 ant 来确认。不过,问题似乎与 jar 属性的使用有关。

    据蚂蚁java task docs(see also):

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

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

    另外一点:jvmargs 属性已被弃用 - 您应该改用嵌套的 jvmarg 元素。

    您可能考虑的一种方法是将应用程序 jar 添加到类路径(连同 classmexer.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>
    

    【讨论】:

    • 感谢您明确评论的答案。但是它还不起作用。也许 OpenOffice 发生了一些奇怪的事情……这个项目是关于编写一个 OpenOffice 扩展的,所以我们的代码是由 OpenOffice 本身加载的,也许它忽略了传递给 jvm 的参数并且(希望)有另一种方法来处理这个问题。无论如何,非常感谢你:-)
    猜你喜欢
    • 2011-11-24
    • 2012-01-17
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2013-04-05
    相关资源
    最近更新 更多