java - Netbeans 平台安装程序 mac OS X 与捆绑 jre(Mac 上的私有(private) Jvm)

标签 java jvm netbeans-platform

我使用 jdk 1.8u40 开发 Netbeans 平台应用程序。 我想使用私有(private) jvm 包 jre jdk 1.8u40 打包 Mac OS X 的安装程序。我使用捆绑 Jre 创建了一个适用于 linux 和 windows 的安装程序,但 Mac os x 不能。我不知道如何使用 jarbundler 和 netbeans 平台来创建 Mac Os X 安装程序。 还有另一个可以为 mac 应用程序捆绑 jre 吗? 谢谢

最佳答案

不幸的是,这是一个遗漏,可以追溯到不久前创建 NetBeans 安装程序项目 ( NBI ) 时。

有一个 RFE为此开放,本文大部分文本来自该 RFE。

事实上,NBI 目前(从 NB 8.0.2 开始)不支持与 Mac OS X 捆绑的 JRE。

为什么会这样,我不知道,但我假设原因是在创建 NBI 时,Mac OS X 上捆绑 JRE 的概念有些陌生。当时,Mac OS X总是预装了 JRE。如今,Mac OS X 没有预装 JRE,Apple 积极鼓励开发人员将私有(private) JRE 与应用程序捆绑在一起。事实上,如果您希望您的应用程序出现在 Mac App Store 中,那么您必须将私有(private) JRE 与您的应用程序捆绑在一起。

解决这个问题基本上有两种方法:

  1. 您可以等待 RFE 被接受并修复。
  2. 自己修复即可。

下面,我将重点介绍第二种方法。它涉及检查 NB 核心源代码并构建您自己的 nbi-engine.jar 文件,然后在您的项目中使用该文件,而不是平台本身附带的文件。

  1. 首先查看 Mercurial 的最新 NB 源代码。 像 hg clone http://hg.netbeans.org/main-golden/ 之类的东西应该 让你继续前进。

  2. 使用 IDE (NetBeans!) 打开位于 nbi/engine 的项目 在您刚刚从 Mercurial checkout 的文件中。打开后,它看起来像这样:NBI Engine project

  3. 在该项目中找到源代码文件: org/netbeans/installer/wizard/components/actions/CreateMacOSAppLauncherAction.java

  4. 对于此文件,您只需添加与同一目录中的等效 CreateNativeLauncherAction.java 文件中存在的代码相同的代码。您可以在 patch file attached to the RFE 中找到需要对 CreateMacOSAppLauncherAction.java 进行的确切更改。 .

  5. 现在重新构建“NBI Engine”项目。结果会生成一个新的nbi-engine.jar。您需要从该项目中回收 nbi-engine.jar 文件并将其放在其他位置。之后,您将不再需要“NBI Engine”项目,并且可以将其删除。事实上,您可以删除在第 1 步中从 Mercurial checkout 的所有内容。

就是这样。

现在剩下的就是弄清楚如何让您的项目使用新生成的 nbi-engine.jar 文件,而不是 NB 平台附带的文件。下面我将解释如何为基于 Maven 的 NB 平台项目执行此操作。如果您的项目是基于 Ant 的,那么您就得靠自己了。 :-(

在您的 POM 文件中进行以下调整:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>nbm-maven-plugin</artifactId>
    <configuration>
        <userSettings>
            <!-- This will override parameter of the same name set by the MOJO -->
            <nbi.engine.jar>path-to-an-alternative-nbiengine-jar</nbi.engine.jar>
        </userSettings>
    </configuration>
</plugin>

仅此而已。

您的下一个问题将是如何从 Oracle 的官方 JRE 包中创建适用于 Mac 的 JRE bundle 。但这不是你问的问题。 :-)

关于java - Netbeans 平台安装程序 mac OS X 与捆绑 jre(Mac 上的私有(private) Jvm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29600720/

相关文章:

java - 我可以在 Scala 中将本地 var 作为 Volatile,因为在 Java 中这是不可能的吗?

java - 从 JVM 调用 CLR 代码

java - 今天的 Eclipse RCP 4 与 NetBeans 平台 8 0​​x104567911

java - 返回 HttpStatus 代码的更好方法 Spring REST

java - 为什么gson不序列化本教程代码?

java - 无论内存需求有多大,有什么方法可以强制 JVM 使用交换?

java - 松散耦合是否更可靠(基于来自 netbeans 的查找 API)?

java - 单击 'Next' 时显示等待光标 - Netbeans WizardDescriptor

java - 接收 Google Cloud Endpoints 204 无内容,直至关闭 - 重新启动

java - 通过使用 netbeans 单击 jbutton 将带有行的 jbutton 添加到 jtable 中