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

hrirmatl  于 2022-11-10  发布在  Java
关注(0)|答案(8)|浏览(229)

是否有办法将Java应用程序转换为Mac OS X可执行应用程序?
我使用NetBeans在Java中进行开发,并且我想将“dist”文件夹“打包”到一个应用程序中(只是为了方便)

2ledvvac

2ledvvac1#

使用Apple Java扩展及其指南

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

其他参考:

zujrkrfu

zujrkrfu2#

有一个库可用于打包Java应用程序

Packagehttps://github.com/libgdx/packr

打包JAR、资源和JVM以在Windows(ZIP)、Linux(ZIP)和Mac OS X(.app)上分发,添加本机可执行文件以使其看起来像是本机应用程序。
它甚至可以为您最小化JRE。

vmpqdwk3

vmpqdwk33#


Packr是一个很棒的工具,但是当时我发现我想要一些“更容易使用”的东西,所以jar2app就诞生了。我知道这是一个老问题,但是也许其他人会发现这个程序比其他替代品更容易使用。如果他们不这样做,在FAQ中有一个直接的参考,可以找到其他替代品(比如Packr)。

zbwhf8kr

zbwhf8kr4#

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

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

enxuqcxy

enxuqcxy5#

截至JDK 14,还有**📦 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

警告:这是否是一个bug可能还存在争议,可能会在未来的版本中得到解决,但在当前版本中,如果您将输入文件夹指定为-i .,并且没有为--dest提供自定义目标,那么jpackage将在当前文件夹中捆绑 * 所有内容 *...包括它刚刚创建的捆绑包。也就是说,当 * .既是输入文件夹 * 又是输出文件夹 * 时,它在自身上递归:D。

szqfcxe2

szqfcxe26#

由于一些链接在接受的答案是不再可用或适合在2020年,8年的问题被问到,我想分享我的发现,我确认今天的工作。
有一个工具,javapackager,与java一起提供,可以为您打包在Windows,Linux,macOS上的java应用程序。
以下是官方手册:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javapackager.html
(Also这里还有其他有用的工具:(x、x、e、f、x)
为了打包一个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上打包应用程序的人,就像我一样。

at0kjp5o

at0kjp5o7#

所以这些选项对我都不起作用(也许是因为我运行的是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。我编写了一个shell脚本,如下所示:java -Xmx256m -jar /my/path/to/the/game/Colossus.jar net.sf.colossus.appmain.Start,然后创建了一个automator应用程序,它的唯一动作是“运行Shell脚本”,启动该脚本。工作起来很有魅力,不需要安装Ant,没有命令行应用程序需要你下载java vms,最好的是它使用苹果工具,所以将与较新版本的OSX一起工作。

8iwquhpp

8iwquhpp8#

你可以试试这个应用程序,它捆绑你的jar文件到Mac应用程序
编辑:很容易使用,选择Jar文件和一个图标。在这里你可以看到screen shoot.
https://github.com/aprsn/Mac-App-Creator

相关问题