我有一个名为 Alphabet.jar 的有效 .jar 文件。我获取正常运行的 .jar 文件,并将其放置在名为 test/ 的空目录中。运行jpackage后,我成功得到了一个Mac应用程序。通过双击运行应用程序时,我收到以下消息:
“GravitySim”已损坏,无法打开。您应该将其移至垃圾箱。
.jar 文件单独运行成功,使用:
... $ java -jar Alphabet.jar
Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif", which may have unexpected appearance or behavior. Re-enable the "Times" font to remove this warning.
然后打开一个窗口/gui,程序在其中运行。伟大的。然后我 cd 进入 test/ 目录的父目录,并运行 jpackage:
... test/ $ jpackage \
--name GravitySim \
--input test/ \
--main-jar Alphabet.jar \
--main-class Alphabet \
--type dmg
这会创建一个 .dmg,我打开它,将 .app 移动到应用程序中,然后运行它。出现“GravitySim 已损坏...”错误。如果我改用 --type app-image ,则会出现同样的问题。是什么原因导致这个问题?
我正在使用: openjdk版本“16.0.2”2021-07-20 OpenJDK 运行时环境 Microsoft-25298(内部版本 16.0.2+7) OpenJDK 64 位服务器 VM Microsoft-25298(内部版本 16.0.2+7,混合模式)
我使用的是配备 macOS Sonoma 14.0 的 M1 Macbook Air。任何帮助将不胜感激。
我发现了同样的问题,并得出结论,它与 MacOS 安全设置有关,而且我的应用程序未签名(根据 Apple 的说法)。
我的解决方案是删除 .dmg 并以 .pkg 形式分发。
在实践中,我使用命令来准备appimage并完成pkg。用户已确认 pkg 安装有效 - 我无法测试自己。
jpackage \
--type app-image \
--app-version "1.0.0" \
--copyright Copyright \
--description "Product 1.0.0" \
--name "Product" --dest target/appimage \
--temp target/product-tmp --vendor "queeg" --verbose \
--icon product/src/main/resources/product_logo.png \
--input Product-1.0.0/dist \
--main-jar Product-1.0.0.jar \
--main-class product.Main --mac-package-name "Product" \
--resource-dir product/src/jpackage/resources-mac \
jpackage \
--type pkg \
--verbose \
--app-version "1.0.0" \
--app-image target/appimage/Product.app \
--name "Product" \
--icon product/src/main/resources/product_logo.png \
--dest target \
--resource-dir product/src/jpackage/resources-mac \
--vendor queeg