手动在MacOS上为Java 7 jar文件创建Bundle

时间:2014-07-05 03:51:08

标签: java macos

我正在阅读文档,并创建了一个应用程序包(使用Finder,Terminal和TextEdit),如下所示:

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

然而,当我尝试双击取景器时,图标上面有一个“无条目”标志,当我双击时,我得到: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.

如果进程失败,可以重新创建上述错误。例如,使用以下shell脚本替换JavaAppLauncher会重现该问题:

#!/bin/bash
return -1

所以,我想我必须看看JavaAppLauncher失败的原因......

1 个答案:

答案 0 :(得分:5)

好的 - 它花了一些时间,但有很多问题。最后,我从应用程序捆绑器源重新编译了我自己的JavaAppLauncher,并在Xcode中逐步完成了它(非常有用的文档!)。 https://java.net/projects/appbundler

  1. JDK引用似乎是错误的,因此删除JVM运行时键<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 s,但其中一个应用程序有效,而另一个显示错误-1080(!)。删除扩展属性解决了问题:xattr -lr GUITest.app

  4. 另见包装上的java.net页面: http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html