如何从包含 JRE 的 mac os使用 windows 或 linux的 jar 创建可执行文件

问题描述

大家晚上好。

我已经搜索了很多天一个简单且未弃用的答案来回答我的问题:

我在我的电脑 (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文件:

  1. 指定一个名为 env 的环境属性:

    <property environment="env" />

  2. 在创建包的目标中,使用 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 以使用它,欢迎您查看(如果您这样做,请提供反馈)。插件网站上还有其他示例。