繁体   English   中英

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

[英]How to create an executable file from a jar for mac os (using windows or linux) with a JRE included

各位晚上好。

我正在寻找很多天对我的问题的简单且不被弃用的答案:

我在我的电脑(Windows)上创建了一个 java 程序。 通过该程序,我创建了一个可运行的 jar,它可以在我的计算机上完美运行。 现在,我想将 jar 转换为 MAC OS 的可运行文件格式,并在我的应用程序中包含一个 JRE(这样我的客户就不必在他的每台计算机上安装 java)。

经过一些研究,我发现的唯一解决方案太旧(无法使用)或非常复杂(并且没有足够的文档记录)。

我听说过 jar2app,但是您必须包含的有关 JRE 的部分并不是很清楚。 很多人也用 launch4j 回答,但它只创建 Windows 可执行文件。

我同时拥有 Linux 和 Windows,但无法访问 MAC OS 计算机来开发任何东西(只是测试)。 我正在使用 java 1.8。

下面是本文的摘录,我希望它也适用于 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>

使用ant bundle-buttonDemo命令创建一个新版本的ButtonDemo.app 生成的版本包括应用程序 package 中的 JRE。 您可以通过检查应用程序 package 内的 Contents/PlugIns 目录来确认这一点。

考虑将此运行时插件用于非模块化应用程序。 或者如果它是模块化的,有一个类似的插件 github 页面处于活动状态,根据我的经验,问题很快得到解决。 它适用于 Windows、Linux 和 OS X。

即使它使用了jpackage的最新 Java 功能,您仍然应该能够在使用较新 JDK 版本的jpackage时在较早的 JDK 版本中编译您的代码。

我最近更新了一个项目来使用它,欢迎您查看(如果您这样做,请提供反馈)。 插件网站上还有其他示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM