0

我从以前的开发人员那里继承了一些代码,这些代码使用 Ant 构建到一个可执行的 jar 文件中,该文件通过双击运行。应用程序运行,但在某些情况下崩溃并出现 OutOfMemoryError。为了对此进行调查,我想将 -XX:+HeapDumpOnOutOfMemory jvm arg 添加到 Ant 构建文件中,据我了解,该<jvmarg value="-XX:+HeapDumpOnOutOfMemory" />元素需要执行一项<java ...>任务。但是,<java ...>在此代码库中的此或任何其他 Ant 构建文件中找不到任务。

这怎么可能?jar文件如何在没有<java ...>任务的情况下可执行?

我主要要求找出实际上使我的 jar 文件可执行的原因,以便我可以找出将该<jvmarg />元素放在哪里来调试 OOME。

谢谢!

4

2 回答 2

1

<java>任务不会创建可执行的 jar 文件。它执行一个Java程序。

我认为通过双击启动可执行 jar 文件时无法指定 VM 参数。如果要传递 VM 参数,请打开命令提示符并以这种方式执行 jar:

java -XX:+HeapDumpOnOutOfMemory -jar nameOfTheJar.jar
于 2012-06-22T18:46:57.377 回答
1

您的 jar 是可执行的,因为它在 META-INF/MANIFEST.MF 文件中定义了 Main-Class。双击它运行对 Ant 没有任何作用。Ant只是用来打包jar。

为了添加参数并仍然通过双击启动,您可以创建一个快捷方式来运行 JB Nizet 的答案中的命令

于 2012-06-22T18:47:10.430 回答