icns файл не найден ошибка с javapackager на macOS High Sierra

Я только что установил macOS High Sierra (10.13) и пытаюсь обновить написанное мной руководство, в котором показано, как упаковать приложение Java Swing (исполняемый JAR) в установщик macOS.

Шаги учебного пособия отлично работали в macOS 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

Ошибка возникает независимо от того, предоставил ли я файл значка или нет. Есть идеи, как это исправить?


person Dem Pilafian    schedule 01.10.2017    source источник
comment
Похоже, вы получаете эту ошибку при использовании новой Java 9. Выдает ли она также эту ошибку при использовании Java 8? Java 9 была выпущена недавно, я не удивлюсь, если что-то в упаковке сломается в новой Java 9.   -  person Saeid Nourian    schedule 03.10.2017
comment
Команда javapackager работала с Java 9 на Sierra (10.2) до обновления до High Sierra (10.13). Ошибка началась после обновления до High Sierra (10.13). На всякий случай я переустановил Java 9, но ошибка осталась.   -  person Dem Pilafian    schedule 03.10.2017
comment
Проверено с помощью JDK 9 в MAC OS X 10.12.6 и может подтвердить проблему. См .: bugs.java.com/bugdatabase/view_bug.do?bug_id= JDK-8188763   -  person Dem Pilafian    schedule 04.10.2017
comment
Я использую javapackager с JDK 9.0.1, загруженным с сайта Oracle @ oracle.com/technetwork/java/javase/downloads/ и не получите эту ошибку. Я подозреваю, что проблема в сборке JDK.   -  person GabeV    schedule 23.10.2017
comment
@GabeV, я обновился до build 9.0.1 + 11, но все еще сталкиваюсь с ошибкой. Вы использовали вышеуказанный Simplified steps to reproduce? Я действительно хотел бы найти способ изменить шаги для обхода этой проблемы (в настоящее время Oracle планирует устранить ошибку в Java 10 ... в 2021 году?).   -  person Dem Pilafian    schedule 24.10.2017
comment
@DemPilafian Просто попробовал и получил ошибку. Думаю, разница в том, что я использовал -native image в своей команде, а не dmg. В итоге я получаю DMG на своем рабочем столе с помощью ShowTime.app и ссылку на папку «Приложения». Я скопировал приложение, запустил его, и оно работает. Я полагаю, что обходной путь может заключаться в запуске -native image, который сгенерирует файл .app, а затем вы можете создать DMG отдельно. Я готов поспорить, что для этого есть утилиты.   -  person GabeV    schedule 24.10.2017
comment
@GabeV, спасибо, вот и все ... dmg не работает, но image работает, и кажется, что pkg также работает и создает установщик .pkg - отличный от .dmg файл, но все же желаемый результат. (Если вы превратите свой комментарий в ответ, я отмечу его как решение.)   -  person Dem Pilafian    schedule 24.10.2017
comment
@DemPilafian У меня такая же ошибка в OS X 10.13 с JDK 8 (1.8.0_152). PKG успешно создан, но нет вывода DMG с помощью javafx-gradle-plugin.   -  person Vladimir Z.    schedule 30.10.2017


Ответы (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

Обновление (4 декабря 2017 г.):
По-видимому, проблема связана с ошибкой, из-за которой не обнаруживается новая файловая система Apple (APFS) для macOS 10.3 (High Sierra). См .: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8190758

person Dem Pilafian    schedule 01.11.2017