【问题标题】:icns file not found error with javapackager on macOS High SierramacOS High Sierra 上的 javapackager 找不到 icns 文件错误
【发布时间】:2018-11-01 05:22:20
【问题描述】:

我刚刚安装了 ma​​cOS High Sierra (10.13),并正在尝试更新我编写的教程,该教程展示了如何将 Java Swing 应用程序(可执行 JAR)打包到 macOS 安装程序中。

本教程的步骤在 ma​​cOS Serra (10.12) 上运行良好。

现在javapackager 命令崩溃了:

错误:找不到文件。 (-43) 存档:/var/folders/c1/hkb.../images/ShowTime/.VolumeIcon.icns

系统信息:

Darwin Comet.local 17.0.0 Darwin Kernel Version 17.0.0: Thu Aug 24 21:48:19 PDT 2017; root:xnu-4570.1.46~2/RELEASE_X86_64 x86_64
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

重现的简化步骤:

curl --remote-name https://centerkey.com/mac/java/ShowTime.java
javac ShowTime.java
echo "Main-Class: ShowTime" > MainClass.txt
jar cmf MainClass.txt ShowTime.jar *.class
jdk=$(/usr/libexec/java_home)
$jdk/bin/javapackager -deploy -native dmg -name ShowTime \
   -srcdir . -srcfiles ShowTime.jar -appclass ShowTime \
   -outdir deploy -outfile ShowTime -v

完全错误:

Running [/usr/bin/SetFile, -c, icnC, /var/folders/c1/hkb5ph9s7l352nhr17n310vc0000gn/T/fxbundler10109585143778151656/images/ShowTime/.VolumeIcon.icns]
ERROR: File Not Found. (-43)  on file: /var/folders/c1/hkb5ph9s7l352nhr17n310vc0000gn/T/fxbundler10109585143778151656/images/ShowTime/.VolumeIcon.icns 
java.io.IOException: Exec failed with code 2 command [[/usr/bin/SetFile, -c, icnC, /var/folders/c1/hkb5ph9s7l352nhr17n310vc0000gn/T/fxbundler10109585143778151656/images/ShowTime/.VolumeIcon.icns] in unspecified directory
    at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:169)
    at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:142)
    at jdk.packager/com.oracle.tools.packager.IOUtils.exec(IOUtils.java:136)
    at jdk.packager/com.oracle.tools.packager.mac.MacDmgBundler.buildDMG(MacDmgBundler.java:391)
    at jdk.packager/com.oracle.tools.packager.mac.MacDmgBundler.bundle(MacDmgBundler.java:92)
    at jdk.packager/com.oracle.tools.packager.mac.MacDmgBundler.execute(MacDmgBundler.java:549)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:371)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)
Config files are saved to /var/folders/c1/hkb5ph9s7l352nhr17n310vc0000gn/T/fxbundler10109585143778151656/macosx. Use them to customize package.
Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "DMG Installer" (dmg) failed to produce a bundle.
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)

完整教程和步骤: Mac Java! | commands.txt

无论我是否提供图标文件,都会发生错误。关于如何解决它的任何想法?

【问题讨论】:

  • 看起来您在使用新的 Java 9 时遇到此错误。使用 Java 8 时是否也会出现此错误? Java 9 最近发布了,如果包装中的某些东西在新的 Java 9 中被破坏,我不会感到惊讶。
  • javapackager 命令在升级到 High Sierra (10.13) 之前与 Sierra (10.2) 上的 Java 9 一起使用>。该错误在升级到 High Sierra (10.13) 后开始。为了安全起见,我重新安装了 Java 9,但错误仍然存​​在。
  • 我正在使用 javapackager 和从 Oracle 站点 @oracle.com/technetwork/java/javase/downloads/… 下载的 JDK 9.0.1,并且没有收到此错误。我怀疑这是 JDK 构建的问题。
  • @DemPilafian 刚试了一下,确实得到了错误。我认为不同之处在于我在命令中使用了-native image,而不是dmg。我最终使用 ShowTime.app 将 DMG 放在我的桌面上,并链接到 Applications 文件夹。我复制了该应用程序并运行它,它可以工作。我想一个解决方法可能是运行-native image,它将生成.app 文件,然后您可以单独创建DMG。我敢打赌那里有工具可以做到这一点。
  • @DemPilafian 我在带有 JDK 8 (1.8.0_152) 的 OS X 10.13 上遇到了同样的错误。 PKG 创建成功,但没有使用 javafx-gradle-plugin 输出 DMG。

标签: java macos macos-high-sierra javapackager icns


【解决方案1】:

正如 GabeV 所评论的,-native dmg 选项已损坏,但 -native image 有效。

错误报告:
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8188763

幸运的是,-native pkg 选项也有效。它会生成 .pkg 安装程序文件而不是 .dmg 磁盘映像,但在许多情况下,安装程序文件是理想的结果。

新步骤 pkg 解决方法:

curl --remote-name https://centerkey.com/mac/java/ShowTime.java
javac ShowTime.java
echo "Main-Class: ShowTime" > MainClass.txt
jar cmf MainClass.txt ShowTime.jar *.class
jdk=$(/usr/libexec/java_home)
$jdk/bin/javapackager -deploy -native pkg -name ShowTime \
   -srcdir . -srcfiles ShowTime.jar -appclass ShowTime \
   -BappVersion=1.0.0 -outdir deploy -v
ls -l deploy
open deploy/ShowTime-1.0.0.pkg

文档:
https://docs.oracle.com/javase/9/tools/javapackager.htm

更新(2017 年 12 月 4 日):
显然,该问题与未检测到适用于 macOS 10.3 (High Sierra) 的新 Apple 文件系统 (APFS) 的错误有关。见:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8190758

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2019-01-03
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多