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

时间:2016-07-15 10:34:15

标签: java command-line anylogic

是否可以在导出的独立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

由于

2 个答案:

答案 0 :(得分:3)

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

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

在Mac上

您可以在以下文件夹中找到jre。它是一个隐藏的文件夹,所以如果Mac没有设置为显示隐藏文件夹,请转到查找程序使用命令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版本或是否已安装

答案 1 :(得分:0)

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