我一直在使用Java Application Bundler将 Java 应用程序打包为 .app。如果我将 JRE7 打包到 .app 包中,我已经设法运行该应用程序。是否可以将 .app(在 Info.plist 中)配置为指向 JAVA_HOME 环境变量定义的 JRE?如果我这样做,我会得到“无法加载 Java 运行时环境”!我尝试以不同的方式配置 JAVA_HOME,但没有成功!
任何人都可以提供任何帮助或建议吗?
我一直在使用Java Application Bundler将 Java 应用程序打包为 .app。如果我将 JRE7 打包到 .app 包中,我已经设法运行该应用程序。是否可以将 .app(在 Info.plist 中)配置为指向 JAVA_HOME 环境变量定义的 JRE?如果我这样做,我会得到“无法加载 Java 运行时环境”!我尝试以不同的方式配置 JAVA_HOME,但没有成功!
任何人都可以提供任何帮助或建议吗?
appbundler
应用程序可以使用应用程序包中的嵌入式 Java 7 JRE,也可以使用安装在其中的 Java 7 JRE /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
(与 Web 浏览器插件使用的相同)。他们不能使用安装在(或其他任何地方)下的JDK/Library/Java/JavaVirtualMachines
,而且他们绝对不能使用 Java 6。
但是,您可以做的不是使用appbundler
而是手动构建捆绑包,主要可执行文件是运行java
命令行工具的 shell 脚本(如果未设置JAVA_HOME
,可能会退回到/Library/Internet Plug-Ins
JRE )。JAVA_HOME
这样的脚本将能够同时支持 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 启动器,但请注意,这是一个稍微复杂的情况,因为.app
脚本委托给另一个脚本,而后者又从.app
包之外的位置加载 JAR 文件。不过原理还是一样的。
usr/libexec/java_home -V
匹配Java虚拟机(2):1.8.271.09(x86_64)“Oracle Corporation”-“Java”/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 1.8.0_271(x86_64)“Oracle Corporation”-“Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
我遇到了类似的问题,当我将 java_home 设置为
echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
它设置为 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
所以我像 echo export "JAVA_HOME="Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home" >> ~/.bash_profile
结果进入
Admins-MacBook-Pro:carot arun$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home
如果需要,您还可以在将来编辑它转到您的用户,在我的情况下是 arun 文件夹按 command + shift + 。在您喜欢的任何编辑器中打开 .bash_profile 查看隐藏文件