如何从命令行调用嵌入式 jre 以便 运行 java 应用程序

How to call an embedded jre from command line in order to run java applications

是否可以在导出的独立 Java 应用程序中捆绑 JRE?我们有一个非常具体的要求 运行 在没有安装最新 Java 版本的机器上安装独立的 AnyLogic Java 应用程序,并且由于公司 IT 政策,我们将无法做到所以

通过一些研究,我发现一些网站声称他们已经为 Windows 和 Mac 这样做了。

Using a bundled JRE on OSX https://wiki.openjdk.java.net/display/MacOSXPort/How+to+embed+a+.jre+bundle+in+your+Mac+app http://www.intransitione.com/blog/take-java-to-app-store/

我的问题是,这些帖子中的大多数都提到为 Mac OS x 捆绑应用程序,并要求在 IDE 中创建 jar 文件,例如 Eclipse。但是由于我使用 AnyLogic,jar 文件在我无法干预的情况下被导出。我需要的是更改 运行s jar 文件的命令行代码,目前看起来像这样:

java -Xdock:name="AnyLogic Model" -Dnativewindow.awt.nohidpi=true -cp com.anylogic.engine.jar:com.anylogic.engine.nl.jar:lib/database/querydsl/querydsl-sql-codegen-3.6.3.jar -Xmx256m model6.Simulation $*

(注意:为了便于阅读而减少了代码)

转换成我认为会传递 jre 或 JVM 的东西,用作 java 调用的参数。或者可以设置用于 java 或其他东西的目录...因为在没有安装 java 的机器上调用 java 命令不会呈现任何内容。

我有一个非常简单的应用程序,以及一个从 moneydance 应用程序获得的 jdk 插件,这是一个 运行 在 [=48] 上的 java 应用程序=]x 带有自己的嵌入式 jre,可在此处获得

https://www.dropbox.com/sh/1bedimsb0lj403t/AADYR7iFoBD4YiqS_RGZ2xAVa?dl=0

谢谢

我的一个不在 Stack Exchange 上的同事给了我答案所以这里是,实际上很简单:

为了满足我的特定情况,只需在您提供给客户端的文件夹的根目录中包含一个 jre,然后在执行文件中引用 java 可执行文件。 Windows 和 Mac 的解决方案略有不同,所以这里是:

上Mac

您可以在以下文件夹中找到jre。它是一个隐藏文件夹,因此如果您 Mac 未设置为显示隐藏文件夹,请转到 finder 使用 command-shift-g 并转到

/Library/Java/JavaVirtualMachines/

应该有一个 jdk 文件夹,然后导航到

jdk1.8.0_45.jdk/Contents/Home/jre 

上Windows

jre的位置在

c:\Program Files\Java\

您可以看到 AnyLogic 在如下代码行中自动创建的 .bat 文件中的位置:

@SET PATH_XJAL="%DISK_XJAL%\Program Files\Java\jre6\bin\java.exe"

获得 jre 后,将此文件夹复制到与独立 java 应用程序相同的位置。然后唯一剩下的就是更改 mac 命令行可执行文件和 windows.bat 文件

中的引用位置

上Mac

变化自

java -Xdock:name="AnyLogic Model"

./jre/bin/java -Xdock:name="AnyLogic Model"

上Windows

变化自

    @SET PATH_XJAL="%DISK_XJAL%\Program Files\Java\jre6\bin\java.exe"

   @SET PATH_XJAL= \jre6\bin\java.exe"

运行 Mac 和 Windows 上的 java 应用程序现在将独立于 machine 上的 Java 版本或者是否安装了

另一种方法是使用 Exe4J 将已编译的应用程序编译成可执行文件。它不是免费的,但另一个优点是您只向客户端发送一个 exe 文件,而不是一堆文件。 (免责声明:尚未尝试使用内部 AL7-dbase,但在访问外部数据时它工作正常)。