java - 如何使用 Java 17 的 jpackage 实用程序设置 MacOS DMG 音量图标?

标签 java macos dmg jpackage javapackager

我正在为我的 java 应用程序创建一个 DMG 安装包,以便在 OSX 上使用。我有以下脚本,它创建一个资源目录,在其中放入一些文件,然后运行 ​​jpackage 命令来实际创建 DMG。问题是 dmg 文件在安装时使用应用程序图标而不是我指定的音量图标。

这是脚本:

# create resource directory for jpackage
printf "Creating resource directory..."
mkdir resources
cp "$APP_PATH"/src/main/resources/img/build-resources/moose-app-icon.icns "$APP_PATH"/deploy/resources/moose-app-icon.icns
cp "$APP_PATH"/src/main/resources/img/build-resources/moose180-spaced.png "$APP_PATH"/deploy/resources/moose-background.png
cp "$APP_PATH"/src/main/resources/img/build-resources/moose180-spaced.png "$APP_PATH"/deploy/resources/moose-background-darkAqua.png
cp "$APP_PATH"/src/main/resources/img/build-resources/moose-volume.icns "$APP_PATH"/deploy/resources/moose-volume.icns
echo "Done."

#   actually building the package
printf "Building installation package..."
$jdk/jpackage \
  --resource-dir "$APP_PATH"/deploy/resources \
  --type dmg \
  --input . \
  --main-jar moose.jar \
  --name Moose \
  --app-version "$version" \
  --icon resources/moose-app-icon.icns \
  --description "Moose" \
  --verbose
echo "Done."

在第一步(移动资源)之后,"$APP_PATH"/deploy/resources/ 目录如下所示:

/deploy
  /resources
    - moose-app-icon.icns
    - moose-background-darkAqua.png
    - moose-background.png
    - moose-volume.icns

这是 jpackage documentation for JDK 17 中列出的流程在覆盖 jpackage 资源部分下。它提到在您的资源目录中有一个 app-name-volume.icns 文件,我确实有 (moose-volume.icns),但它使用的是应用程序图标 (moose-app-icon.icns)。

当我在 jpackage 命令中使用 --verbose 标志时,我从创建脚本中获得以下输出:

[21:47:08.776] Using custom package resource [icon] (loaded from file /Users/mpfthprblmtq/Git/moose/deploy/resources/moose-app-icon.icns).
[21:47:08.776] Preparing Info.plist: /var/folders/0t/hr0vs3715v15xzjpfqpmkns40000gn/T/jdk.jpackage15144647471455641486/images/image-4445575315167377480/Moose.app/Contents/Info.plist.
[21:47:08.777] Using default package resource Info-lite.plist.template [Application Info.plist] (add Info.plist to the resource-dir to customize).
[21:47:08.778] Using default package resource Runtime-Info.plist.template [Java Runtime Info.plist] (add Runtime-Info.plist to the resource-dir to customize).
[21:47:08.779] Using default package resource background_dmg.tiff [dmg background] (add Moose-background.tiff to the resource-dir to customize).
[21:47:08.779] Using custom package resource [volume icon] (loaded from file /Users/mpfthprblmtq/Git/moose/deploy/resources/moose-app-icon.icns).
[21:47:08.780] Preparing dmg setup: /var/folders/0t/hr0vs3715v15xzjpfqpmkns40000gn/T/jdk.jpackage15144647471455641486/config/Moose-dmg-setup.scpt.
[21:47:08.780] Using default package resource DMGsetup.scpt [DMG setup script] (add Moose-dmg-setup.scpt to the resource-dir to customize).
[21:47:08.781] Creating DMG file: /Users/mpfthprblmtq/Git/moose/deploy/Moose-1.4.0.dmg.

这告诉我,当我明确将 moose-volume.icns 文件与主文件处于同一级别时,jpackage 正在使用我的 moose-app-icon.icns应用程序图标。关于如何告诉 jpackage 使用 moose-volume.icns 文件而不是应用程序图标,有什么想法吗?

我使用的是 OSX Ventura 13.2.1,我的 jpackage 版本是 17.0.3。

最佳答案

根据您自己提供的网页信息:

macOS DMG

  • DMG setup script, application-name-dmg-setup.scpt.
  • Applications license properties list, application-name-license.plist.
  • Background file, application-name-background.tiff.
  • Drive icon, application-name-volume.icns.

因此,您应该使用 moose.icns 作为应用程序图标,moose-volume.icns 作为音量图标 - -name moose 作为您的应用程序名称(注意小写字母)。如果您选择将应用程序命名为 Moose,则将图标更新为 Moose.icnsMoose-volume.icns – 它区分大小写,并且实际上适用于我的应用程序,但是 < em>application-name 部分必须完全匹配您的应用程序名称(由 --name 选项指定)。

关于java - 如何使用 Java 17 的 jpackage 实用程序设置 MacOS DMG 音量图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75818974/

相关文章:

java - 如何接受 SOAP header 部分的 MustUnderstand 和其他属性?

java - 连续比较2个ArrayList的大小和元素

java - 我们可以从失败的地方开始 Maven 构建吗

java - 无法在 OS x (El Capitan) 上运行 jmeter

cocoa - 在 Cocoa 中下载 .dmg 文件

xcode : . dmg 文件不使用下载器下载

java - JOptionPane.showInputDialog 显示两次

cocoa - 如何使用 Perl 中的 OS-X ScriptingBridge 框架关闭窗口?

macos - 我在 osx mavericks 上更新后,Cocoa pods 出现 ruby​​ 权限被拒绝错误

macos - 如何构建 native Mac OS X 安装程序(在非 Mac 平台上)?