Создание пакета для Java 7 jar-файла на macOS вручную

#java #macos

#java #macos

Вопрос:

Я читаю документацию и создал пакет приложений (используя Finder, Terminal и TextEdit) следующим образом:

 GUITest.app/
    Contents/
        Info.plist
        PkgInfo
        MacOS/
            JavaAppLauncher
        Resources/
            GenericJavaApp.icns
            Java/
                gui.jar
  

Однако, когда я пытаюсь дважды щелкнуть по finder, на значке появляется знак «нет входа», и когда я дважды щелкаю, я получаю: The application "GUITest" can't be opened. -10810

Если я попытаюсь запустить JavaAppLauncher вручную: ./GUITest.app/Contents/MacOS/JavaAppLauncher я получаю диалоговое окно с надписью « JRELoadError «

Info.plist кажется довольно простым. PkgInfo — это просто, AAPL???? а JavaAppLauncher — из http://java.net/projects/appbundler/downloads/download/appbundler-1.0.jar

Могут ли эти проблемы быть вызваны плохим Info.plist или чем-то другим?

Вот Info.plist:

 <?xml version="1.0" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>JavaAppLauncher</string>
    <key>CFBundleIconFile</key>
    <string>GenericApp.icns</string>
    <key>CFBundleIdentifier</key>
    <string>gui.GUITest</string>
    <key>CFBundleDisplayName</key>
    <string>GUITest</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>GUITest</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>NSHumanReadableCopyright</key>
    <string>©xirt, 2014</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.developer-tools</string>
    <key>JVMRuntime</key>
    <string>jdk1.7.0_17.jdk</string>
    <key>JVMMainClassName</key>
    <string>main.GUITest</string>
    <key>JVMOptions</key>
    <array>
    </array>
    <key>JVMArguments</key>
    <array>
    </array>
  </dict>
</plist>
  

Примечание: знак «вход запрещен» был удален путем удаления расширенного атрибута com.apple.quarantine:
xattr -d com.apple.quarantine JavaAppLauncher
Но проблема все еще возникает:

 $ open ./GUITest.app
LSOpenURLsWithRole() failed with error -10810 for the file /Users/.../GUITest.app.
  

Ошибка, приведенная выше, может быть создана повторно, если процесс просто завершится неудачей. Например, замена JavaAppLauncher следующим сценарием командной строки воспроизводит проблему:

 #!/bin/bash
return -1
  

Итак, я полагаю, я должен посмотреть, почему JavaAppLauncher происходит сбой…

Комментарии:

1. Опубликуйте info.plist , поскольку это может быть просто из-за неправильного указания пути к среде выполнения.

Ответ №1:

Хорошо — потребовалось некоторое вычисление, но был ряд проблем. В конечном счете, я перекомпилировал свой собственный JavaAppLauncher из исходного кода app bundler и обработал его в Xcode (так много полезной документации!). https://java.net/projects/appbundler

  1. Ссылка на JDK казалась неверной, поэтому здесь помогло удаление ключа JVM Runtime <key>JVMRuntime</key>
    <string>jdk1.7.0_17.jdk</string>
    .

  2. Каталог Java должен был находиться на уровне содержимого, а не ресурсов.

     GUITest.app/
        Contents/
            Info.plist
            PkgInfo
            MacOS/
                JavaAppLauncher
            Resources/
                GenericJavaApp.icns
            Java/
               gui.jar
      
  3. После устранения этих проблем, несмотря на то, что два отдельных приложения отображали идентичные diff файлы, одно работало, в то время как другое показывало ошибку -1080 (!). Удаление расширенных атрибутов решило проблему: xattr -lr GUITest.app .

смотрите также java.net страница упаковки:http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html