将Java应用程序转换为Mac OS X应用程序

时间:2012-06-14 16:44:54

标签: java macos netbeans

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

我使用NetBeans开发Java,我想将“dist”文件夹“打包”到应用程序中(仅为方便起见)

8 个答案:

答案 0 :(得分:16)

使用Apple Java Extensions及其指南

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

其他参考文献:

答案 1 :(得分:11)

有一个库让你打包你的Java应用程序
Packr https://github.com/libgdx/packr

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

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

答案 2 :(得分:3)

<强> jar2app

Packr是一个很棒的工具,但当时我发现我想要的东西&#34;更容易使用&#34;所以 jar2app 诞生了。我知道这是一个老问题,但也许其他人可能会发现这个程序比其他选择更容易使用。如果他们没有,那么a direct reference in the FAQ就会有其他选择(例如Packr)。

答案 3 :(得分:2)

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

命令

GetAll().OrderByDescending(m => m.CreateDate)
    .Where(x => x.BirthDate.HasValue 
        && (endDate - x.BirthDate.Value).Days <= n)

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

答案 4 :(得分:1)

由于被接受的答案中的某些链接在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上打包应用程序的其他人。

答案 5 :(得分:1)

从 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 将把 一切 捆绑在当前文件夹中......包括它刚刚创建的捆绑包,即它对自身进行递归,因为 . 是输入文件夹输出:D .

答案 6 :(得分:0)

因此,这些选项都不适合我(也许是因为我正在运行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虚拟机,而且最好的方法是使用Apple工具,因此可以与更新版本的OS X配合使用。

答案 7 :(得分:-1)

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

编辑:它易于使用,选择Jar文件和图标。在这里,您可以看到screen shoot.

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