如何从命令行调用嵌入式 jre 以运行 java 应用程序
Posted
技术标签:
【中文标题】如何从命令行调用嵌入式 jre 以运行 java 应用程序【英文标题】:How to call an embedded jre from command line in order to run java applications 【发布时间】:2016-11-18 12:50:51 【问题描述】:是否可以在导出的独立 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 捆绑应用程序,并要求在 Eclipse 等 IDE 中创建 jar 文件。但是由于我使用 AnyLogic,jar 文件在我自己无法干预的情况下被导出。我需要更改运行 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 插件,这是一个在 OSx 上运行的 java 应用程序,具有自己的嵌入式 jre,可在此处获得
https://www.dropbox.com/sh/1bedimsb0lj403t/AADYR7iFoBD4YiqS_RGZ2xAVa?dl=0
谢谢
【问题讨论】:
【参考方案1】:我的一位不在 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\
您可以在 .bat 文件中看到 AnyLogic 在代码行中自动创建的位置,如下所示:
@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 应用程序现在将独立于机器上的 Java 版本或是否安装
【讨论】:
谢谢,雅科。澄清一下:您仍然需要手动将 JRE 复制到客户的机器上,对吧? 您只需将 jre 包含在您将提供给客户端的正常文件集中的文件夹中。在我更改路径的代码中,假设您将所需的特定 Java 版本复制到根文件夹结构中,这样您就可以通过在 Windows 上将路径设置为\jre\bin\java.exe
和 @987654330 来引用它@ 在 Mac 上。为了更清楚,我编辑了答案中的第一段【参考方案2】:
另一种选择是使用Exe4J 将已编译的应用程序编译为可执行文件。它不是免费的,但另一个优点是您只向客户发送一个 exe 文件,而不是一堆文件。 (免责声明:尚未尝试使用内部 AL7-dbase,但在访问外部数据时可以正常工作)。
【讨论】:
一个免费的替代方案 - 我没有使用过,但其他一些开发人员建议使用它 - Launch4j以上是关于如何从命令行调用嵌入式 jre 以运行 java 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Java基础 -- 面向对象和面向过程的区别Java语言的特点JVM JDK 和 JRE(.class字节码文件)Java 程序从源代码到运行的步骤
sh 从终端/ shell /命令行/命令提示符下载Oracle网站上的JDK / JRE / Java二进制文件的脚本
sh 从终端/ shell /命令行/命令提示符下载Oracle网站上的JDK / JRE / Java二进制文件的脚本
sh 从终端/ shell /命令行/命令提示符下载Oracle网站上的JDK / JRE / Java二进制文件的脚本