【问题标题】:What is a good way to deploy a Java program and give JVM arguments?部署 Java 程序并提供 JVM 参数的好方法是什么?
【发布时间】:2012-04-29 05:43:52
【问题描述】:

目前我一直将我的应用程序部署为 .jar 文件,因为每个操作系统的用户都可以双击它。但是,我现在需要增加最大堆大小,唯一的方法是将命令行参数 (-Xmx1g) 传递给 JVM。我希望可以将它包含在 jar 清单中,但事实并非如此。

所以现在我不得不在具有参数的 .jar 中包含一个 .bat 或 .csh。似乎有更好的方法可以做到这一点?我不认为 Webstart 是一个好的选择,因为 .jar 旨在在用户目录中运行,它会在其中写出文件。该应用程序是一个桌面 GUI 应用程序。

【问题讨论】:

  • “我不认为 Webstart 是一个好的选择,因为 .jar 是要在它写出文件的用户目录中运行。” 除了“运行在用户的目录中”(这是无关紧要的废话,因为受信任的 JWS 应用程序可以读取/写入其他 Java 应用程序可以访问的任何文件。)JWS 可以用一只手绑在它后面来完成所有这些工作。使用Java Web Start

标签: java deployment heap-memory java-web-start


【解决方案1】:

不幸的是,无法在 jar 内的清单文件中指定 vmargs,因此您需要一种解决方法,例如:

  • 创建一个脚本,使用指定的 vm args 启动 jar 文件
  • 将您的 jar 包装在一个可执行文件中,该可执行文件将用作启动器
  • 将您的 Java 代码编译为本机二进制文件

例如,第一个解决方案可以使用批处理或 shell 脚本轻松实现,而对于第二个解决方案,有几种可能有用的替代方案,例如前面提到的原生 Java Web Startlaunch4j,这是一个跨平台的 Java 可执行包装器。 第三种解决方案可以在某些情况下实现,如果您的代码与 GNU classpath 库兼容,在这种情况下,您可以使用 GCJ 编译为本机二进制文件。

【讨论】:

  • 谢谢。我决定使用 Launch4j 工具为 windows 用户创建一个 exe。
【解决方案2】:

Webstart 似乎是实现这一目标的好方法,如果您拥有正确的权限,则没有什么能阻止您读取/写入用户的文件系统。

它还提供了几个有趣的“功能”,包括:

  • 可以透明地向用户推送升级
  • 检查用户是否使用了正确版本的 JRE

在您的情况下,您只需要使用以下语法:

<j2se version="1.7+" java-vm-args="-Xmx1g" href="http://java.sun.com/products/autodl/j2se"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2010-11-07
    • 2011-11-10
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多