【问题标题】:How to create an executable file from a jar for mac os (using windows or linux) with a JRE included如何从包含 JRE 的 mac os(使用 windows 或 linux)的 jar 创建可执行文件
【发布时间】:2021-04-23 06:24:04
【问题描述】:

大家晚上好。

我一直在寻找一个简单且不被弃用的答案来回答我的问题:

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

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

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

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

【问题讨论】:

  • VassiliKan - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。要mark an answer as accepted,您需要单击答案左侧的大复选标记 (✓)。 注意:您只能接受一个问题的答案。但是,一旦您拥有超过 15 个声望点,您就可以upvote 任意数量的答案。

标签: java windows macos executable-jar


【解决方案1】:

下面是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>

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

【讨论】:

    【解决方案2】:

    考虑将this Runtime Plugin 用于非模块化应用程序。或者如果它是模块化的,则有a similar plugin。 github 页面处于活动状态,根据我的经验,问题很快得到解决。它适用于 Windows、Linux 和 OS X。

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 2013-01-11
      • 2011-10-22
      • 2015-11-27
      • 2011-06-10
      • 2011-02-09
      • 1970-01-01
      • 2023-03-06
      • 2016-12-27
      相关资源
      最近更新 更多