【问题标题】:Convert Java application to Mac OS X app将 Java 应用程序转换为 Mac OS X 应用程序
【发布时间】:2012-06-17 18:10:42
【问题描述】:

有没有办法将 Java 应用程序转换为 Mac OS X 可执行应用程序?

我使用 NetBeans 进行 Java 开发,我想将“dist”文件夹“打包”到应用程序中(只是为了方便)

【问题讨论】:

  • 我想你是在问JAR Bundler
  • @birryree 不完全是......当我构建项目时,NetBeans 会生成一个“.jar”文件和一个“lib”文件夹,其中包含应用程序所需的库......我是什么想知道是否有办法将完整的“dist”文件夹打包到应用程序中,以便在一个包中分发完整的应用程序(包括所需的库),并使该包在 Mac OS X 中可执行
  • @Barranka:如果你想在 OS X 上部署一个 Java 应用程序,你会想以某种方式让JarBundler(以及 Mac)参与到你的构建过程中。虽然可以使用较低级别的工具制作 app bundle,但可能不太方便。
  • 我只是在谷歌上搜索jar to app converter,它会生成大量应用程序和相关博客。here 就是其中之一。
  • Install4J 也可以正常工作。对开源项目免费。

标签: java macos netbeans


【解决方案1】:

使用 Apple Java 扩展及其指南

Apple Java Extensions 包含一个非常完整的开发指南,其中包含有关deployment of Java applications on Mac OS X 和应用程序包生产的信息。它还介绍了 Apple Java 扩展的其他方面,例如对与标准 Mac OS X UI 集成的支持。

其他参考:

【讨论】:

  • 很遗憾,尽管 Apple 在 2013 年 10 月发布了 Java 6 的错误修复版本,但该指南现在仍位于已停用的库中。有帮助吗?
  • @Gene:据我所知,我第一段中的第二个链接在创建可部署应用程序时仍然有效。 Java Extensions 文档似乎确实已经离开了,或者说我们处于遗留领域。但这仅适用于集成 API。
  • 谢谢。那是一篇不错的文章。一个重要的补充是,除非整个 jre 与它捆绑在一起,否则 Apple 不会将 Java 应用程序放在他们的商店中。 Java 7 jre 非常庞大:超过 60 兆字节。让所有的路径都正确是很繁琐的。我刚刚发现实际上有一个适用于 Mavericks 的 jre 6。必须看看我是否可以为此找到一个构建过程来减小捆绑包的大小。
【解决方案2】:

有一个库可以让您打包 Java 应用程序
Packrhttps://github.com/libgdx/packr

打包您的 JAR、资产和 JVM,以便在 Windows (ZIP)、Linux (ZIP) 和 Mac OS X (.app) 上分发,添加本机可执行文件以使其看起来像是本机应用程序。

它甚至可以为您最小化 JRE。

【讨论】:

    【解决方案3】:

    jar2app

    Packr 是一个很棒的工具,但当时我发现我想要一些“更易于使用”的东西,于是 jar2app 诞生了。我知道这是一个老问题,但也许其他人会发现这个程序比其他替代方案更易于使用。如果他们不这样做,还有 a direct reference in the FAQ 可以替代其他替代品(例如 Packr)。

    【讨论】:

    • 太棒了!完美地完成工作
    【解决方案4】:

    您可以使用javapackager 工具构建应用程序并将其包装到安装程序中,以下命令显示如何将 jar 文件转换为 bundle 文件:

    命令

    mkdir -p package/macosx
    cp Test.icns package/macosx
    jdk=$(/usr/libexec/java_home)
    $jdk/bin/javapackager -deploy -native dmg \
       -srcfiles Test.jar -appclass package.Test -name Test \
       -outdir deploy -outfile Test -v
    cp deploy/bundles/Test-1.0.dmg installer.dmg
    ls -l
    open installer.dmg
    

    更改应用程序图标和更多信息MacJava

    【讨论】:

      【解决方案5】:

      由于已接受答案中的某些链接在 2020 年不再可用或不再适用,距问题提出 8 年,我想分享我今天确认有效的发现。

      java自带一个工具javapackager,可以为你打包Windows、Linux、macOS上的java应用。

      这里是官方手册:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html

      (这里还有其他有用的工具:https://docs.oracle.com/javase/8/docs/technotes/tools/


      为了打包一个mac应用程序,我使用了这个命令:

      javapackager \
          -deploy \
          -native image \
          -srcdir ./csv-encrypt-tool-mac \
          -srcfiles csv-encrypt-tool.jar \
          -srcfiles dict \
          -srcfiles config \
          -srcfiles log \
          -outdir ./dist \
          -outfile csv-encrypt-tool \
          -appclass some.package.CsvEncToolApp \
          -name "csv-encrypt-tool" \
          -title "csv-encrypt-tool" \
          -nosign \
          -v \
          -BjvmOptions=-Xmx4096m \
          -BmainJar=csv-encrypt-tool.jar \
          -Bicon=icon.icns
      
      

      这就是解释:

      -deploy \                                       # Assembles the application package for redistribution with sys JRE
      -native image \                                 # Build a .app file. If you want a .dmg, use -native dmg
      -srcdir ./csv-encrypt-tool-mac \                # directory where my jar and resource files in
      -srcfiles csv-encrypt-tool.jar \                # my executable jar, path relative to -srcdir
      -srcfiles dict \                                # one of my resource directories, path relative to -srcdir
      -srcfiles config \                              # another one of my resource directories, path relative to -srcdir
      -srcfiles log \                                 # again, one of my resource directories, path relative to -srcdir
      -outdir ./dist \                                # where I want the package to be put
      -outfile csv-encrypt-tool \                     # the output file name without extension, the final file (or bundle which is a directory actually) will be csv-encrypt-tool.app
      -appclass some.package.CsvEncToolApp \          # the class with main method, which is the entry point of the whole app
      -name "csv-encrypt-tool" \                      # the name (not very sure what this is for)
      -title "csv-encrypt-tool" \                     # the title (not sure what it is either)
      -nosign \                                       # not sign the app since this is just an internal tool, if you want to publish it, signing is necessary
      -v \                                            # verbose
      -BjvmOptions=-Xmx4096m \                        # I need 4GB max heap size
      -BmainJar=csv-encrypt-tool.jar \                # the jar file with main class
      -Bicon=icon.icns                                # the icon
      
      

      命令执行后,会在dist中创建一些文件和目录,我想要打包的地方,其中一个目录是bundles。应用程序放在那里。

      由于我只是构建了一个内部工具,因此无需其他生产就绪选项即可签名和打包。可以参考官方手册获取帮助。

      希望这可以帮助那些像我一样在 2020 年不知道如何在 macOS 上打包应用程序的人。

      【讨论】:

        【解决方案6】:

        从 JDK14 开始,还有 ?jpackage (JEP-392),在撰写本文时仍处于孵化阶段,可能尚未准备好生产,但已经完成了工作。

        使用 swt app 的示例用法(假设所有必需的 jar 文件都位于 files 文件夹中;您还可以使用 --resource-dir 提供自定义资源文件夹):

        jpackage --type dmg \
         -i files \
         -n Bigly \
         --main-class com.biglybt.ui.Main \
         --main-jar BiglyBT.jar \
         --java-options -XstartOnFirstThread \
         --mac-package-name BiglyBt \
         --icon app.icns \
         --verbose
        

        完整的选项列表使用:

        jpackage --help
        

        警告:这是否是一个错误可能还有待商榷,可能会在未来的版本中解决,但在当前版本中,如果您将输入文件夹指定为-i .,并且不提供--dest 的自定义目标然后 jpackage 将 everything 捆绑在当前文件夹中...包括它刚刚创建的捆绑包,即它自己递归,因为 . 既是输入文件夹 输出:D.

        【讨论】:

        • 在 macOS 11.2.3 上为我工作!非常感谢您提出这个建议!
        【解决方案7】:

        所以这些选项都不适合我(可能是因为我运行的是 OS X 10.15,也可能是因为这些项目中的大多数已经存在多年了,谁知道呢)。安装 Catalina 后,我围绕 Java 应用构建的现有应用不再工作。

        Ultimately, this post helped:只需使用 Automator 运行一个脚本,该脚本运行 java 命令来启动 jar。我想制作一个应用程序来启动Colossus, a Java version of the old Avalon Hill board game Titan。我编写了一个类似于:java -Xmx256m -jar /my/path/to/the/game/Colossus.jar net.sf.colossus.appmain.Start 的 shell 脚本,然后创建了一个自动化应用程序,其唯一的操作是启动该脚本的“运行 shell 脚本”。就像一个魅力,无需安装 Ant,无需您下载 java vms 的命令行应用程序,最重要的是它使用 Apple 工具,因此可以与较新版本的 OS X 一起使用。

        【讨论】:

          【解决方案8】:

          你可以试试这个应用,它将你的 jar 文件捆绑到 Mac 应用中

          编辑:很容易使用,选择Jar文件和一个图标。在这里你可以看到screen shoot.

          https://github.com/aprsn/Mac-App-Creator

          【讨论】:

          • 为了充分披露,您应该表明您是您推荐的代码的作者。此外,您可能会提到此解决方案如何改进现有的许多解决方案。
          • 不提供链接,您应该提供摘要作为答案以及链接
          • 简单易用。我觉得没必要解释。选择 jar 文件选择图标,然后给它一个名称。它只是创建一个应用程序。如果分享你自己的应用程序是错误的,我很抱歉。我可以删除答案。
          • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
          • @AwkwardCoder 下次我会小心的
          猜你喜欢
          • 2018-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-15
          • 1970-01-01
          相关资源
          最近更新 更多