问题描述
大家晚上好。
我在我的电脑 (Windows) 上创建了一个 java 程序。从那个程序我创建了一个可运行的 jar,它完美地在我的电脑上运行。 现在,我想将该 jar 转换为 MAC OS 的可运行文件格式,并在我的应用程序中包含一个 JRE(这样我的客户就不必在他的每台计算机上安装 java)。
经过一些研究,我发现的唯一解决方案太旧(无法使用)或非常复杂(并且没有足够的文档)。
我听说过 jar2app,但是您必须包含的关于 JRE 的部分不是很清楚。很多人也用launch4j回答,但它只创建Windows可执行文件。
我有 Linux 和 Windows,但无法访问 MAC OS 计算机来开发任何东西(只是测试)。我使用的是 Java 1.8。
解决方法
下面是 this article 的摘录,我希望它也适用于 Java-8:
由于此示例使用 JAVA_HOME
定义运行时子元素,因此请确保为您的环境正确配置它。例如,在您的 .bashrc file
中,将 JAVA_HOME
定义如下:
export JAVA_HOME=/usr/libexec/java_home
使用以下步骤修改项目目录顶部的build.xml
文件:
-
指定一个名为 env 的环境属性:
<property environment="env" />
-
在创建包的目标中,使用 env 属性指定 JRE 在系统上的位置:
<runtime dir="${env.JAVA_HOME}" />
生成的 build.xml
文件应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ButtonDemo" default="default" basedir=".">
<import file="nbproject/build-impl.xml"/>
<property environment="env" />
<taskdef name="bundleapp"
classname="com.oracle.appbundler.AppBundlerTask"
classpath="lib/appbundler-1.0ea.jar" />
<target name="bundle-buttonDemo">
<bundleapp outputdirectory="dist"
name="ButtonDemo"
displayname="Button Demo"
identifier="components.ButtonDemo"
mainclassname="components.ButtonDemo">
<runtime dir="${env.JAVA_HOME}" />
<classpath file="dist/ButtonDemo.jar" />
</bundleapp>
</target>
</project>
使用 ButtonDemo.app
命令创建新版本的 ant bundle-buttonDemo
。生成的版本在应用程序包中包含 JRE。您可以通过检查应用包内的 Contents/PlugIns 目录来确认这一点。
考虑将 this Runtime Plugin 用于非模块化应用。或者,如果它是模块化的,则有 a similar plugin。 github 页面处于活动状态,根据我的经验,问题会得到及时解决。它适用于 Windows、Linux 和 OS X。
即使它使用了 jpackage
的最新 Java 特性,您仍然应该能够在使用较新 JDK 版本的 jpackage
时在较早的 JDK 版本中编译代码。
我最近更新了 a project 以使用它,欢迎您查看(如果您这样做,请提供反馈)。插件网站上还有其他示例。