我一直在使用Java Application Bundler將Java應用程序打包爲.app。如果我將JRE7打包到.app軟件包中,我已經設法運行該應用程序。 是否可以配置.app(在Info.plist中)指向由JAVA_HOME環境變量定義的JRE? 如果我這樣做,我得到「無法加載Java運行時環境」!我試圖以不同的方式配置JAVA_HOME,但沒有成功!指向由JAVA_HOME定義的JRE的Java AppBundler應用程序
任何人都可以提供任何幫助或建議嗎?
我一直在使用Java Application Bundler將Java應用程序打包爲.app。如果我將JRE7打包到.app軟件包中,我已經設法運行該應用程序。 是否可以配置.app(在Info.plist中)指向由JAVA_HOME環境變量定義的JRE? 如果我這樣做,我得到「無法加載Java運行時環境」!我試圖以不同的方式配置JAVA_HOME,但沒有成功!指向由JAVA_HOME定義的JRE的Java AppBundler應用程序
任何人都可以提供任何幫助或建議嗎?
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文件。然而,原則仍然是一樣的。
我也有一個shell腳本來運行應用程序,但由於用戶對運行腳本的瞭解,這不是一個選項。它應該是一個可點擊的應用程序。我應該在JVMRuntime參數下將我的應用的Info.plist放到什麼位置?如何將其指向JAVA_HOME? –
用/ Library/Internet Plug-Ins/JavaAppletPlugin.plugin /安裝的Java成功運行它。只需從Info.plist中刪除JVMRuntime參數,而不是設置指向JAVA_HOME的值! –
@JuricaKrizanic我已經提供了一些更詳細的信息,包括Info.plist的必要內容,以使其與JAVA_HOME –