16

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

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

4

8 回答 8

18

使用 Apple Java 扩展及其指南

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

其他参考:

于 2012-06-14T17:55:23.067 回答
11

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

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

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

于 2014-05-05T04:15:45.877 回答
6

jar2app

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

于 2017-01-28T00:37:35.720 回答
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

于 2017-05-23T14:09:20.867 回答
3

由于已接受答案中的某些链接在 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 上打包应用程序的人,就像我一样。

于 2020-10-27T02:06:42.713 回答
3

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

与swt 应用程序一起使用的示例用法(假设所有必需的 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 将捆绑所有内容在当前文件夹中...包括它刚刚创建的包,即它本身是递归的,因为.它既是输入文件夹是输出 :D 。

于 2021-03-07T10:47:31.103 回答
0

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

最终,这篇文章有所帮助:只需使用 Automator 运行一个脚本,该脚本运行 java 命令来启动 jar。我想制作一个应用程序来启动Colossus,这是旧 Avalon Hill 棋盘游戏 Titan 的 Java 版本。我编写了一个看起来像这样的 shell 脚本:java -Xmx256m -jar /my/path/to/the/game/Colossus.jar net.sf.colossus.appmain.Start然后创建了一个自动化应用程序,其唯一的操作是启动该脚本的“运行 shell 脚本”。像魅力一样工作,无需安装 Ant,无需您下载 java vms 的命令行应用程序,最重要的是它使用 Apple 工具,因此可以与较新版本的 OS X 一起使用。

于 2019-11-28T05:58:42.110 回答
-1

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

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

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

于 2018-02-10T17:16:24.317 回答