2013-07-09 42 views
5

我一直在使用Java Application Bundler將Java應用程序打包爲.app。如果我將JRE7打包到.app軟件包中,我已經設法運行該應用程序。 是否可以配置.app(在Info.plist中)指向由JAVA_HOME環境變量定義的JRE? 如果我這樣做,我得到「無法加載Java運行時環境」!我試圖以不同的方式配置JAVA_HOME,但沒有成功!指向由JAVA_HOME定義的JRE的Java AppBundler應用程序

任何人都可以提供任何幫助或建議嗎?

回答

10

appbundler應用程序可以使用應用程序包內部的嵌入式Java 7 JRE,也可以使用安裝在/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home(與Web瀏覽器插件使用的相同)中的Java 7 JRE。他們不能使用JDK/Library/Java/JavaVirtualMachines下安裝(或其他地方,對這個問題),他們肯定6.

什麼你可以這樣做,不過,是不是使用appbundler,而是不能使用Java手動建立捆綁包,主要可執行文件是一個shell腳本,該文件運行命令行工具JAVA_HOME(如果沒有設置JAVA_HOME,可能會回落到/Library/Internet Plug-Ins JRE)。這樣的腳本將能夠同時支持的Java 6和7

你會使用這樣的YourApp.app/Contents/MacOS/YourApp

#!/bin/sh 

PRG=$0 

while [ -h "$PRG" ]; do 
    ls=`ls -ld "$PRG"` 
    link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null` 
    if expr "$link" : '^/' 2> /dev/null >/dev/null; then 
     PRG="$link" 
    else 
     PRG="`dirname "$PRG"`/$link" 
    fi 
done 

progdir=`dirname "$PRG"` 

if [ -n "$JAVA_HOME" ]; then 
    JAVACMD="$JAVA_HOME/bin/java" 
elif [ -x /usr/libexec/java_home ]; then 
    JAVACMD="`/usr/libexec/java_home`/bin/java" 
else 
    JAVACMD="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" 
fi 

exec "$JAVACMD" -classpath "$progdir/../Resources/Jars/*" \ 
     -Dapple.laf.useScreenMenuBar=true \ 
     my.pkg.MainClass 

然後把你的應用程序的JAR文件YourApp.app/Contents/Resources/Jars,圖標在YourApp.app/Contents/Resources/icon.icns,和按照YourApp.app/Contents/Info.plist

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//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>YourApp</string><!-- relative to Contents/MacOS --> 
     <key>CFBundleGetInfoString</key> 
     <string>My clever application</string> 
     <key>CFBundleIconFile</key> 
     <string>icon.icns</string><!-- relative to Contents/Resources --> 
     <key>CFBundleInfoDictionaryVersion</key> 
     <string>8.0</string> 
     <key>CFBundleName</key> 
     <string>YourApp</string> 
     <key>CFBundlePackageType</key> 
     <string>APPL</string> 
     <key>CFBundleSignature</key> 
     <string>????</string> 
     <key>CFBundleVersion</key> 
     <string>8.0</string> 
</dict> 
</plist> 

GATE Developer launcher的全部細節,但請注意,這是一個稍微令人費解的情況下,作爲.app腳本代表一個其他腳本,該腳本依次從位於.app包外部的位置加載JAR文件。然而,原則仍然是一樣的。

+0

我也有一個shell腳本來運行應用程序,但由於用戶對運行腳本的瞭解,這不是一個選項。它應該是一個可點擊的應用程序。我應該在JVMRuntime參數下將我的應用的Info.plist放到什麼位置?如何將其指向JAVA_HOME? –

+0

用/ Library/Internet Plug-Ins/JavaAppletPlugin.plugin /安裝的Java成功運行它。只需從Info.plist中刪除JVMRuntime參數,而不是設置指向JAVA_HOME的值! –

+0

@JuricaKrizanic我已經提供了一些更詳細的信息,包括Info.plist的必要內容,以使其與JAVA_HOME –

相關問題