指向JAVA_HOME定义的JRE的Java AppBundler应用程序

我一直在使用Java Application Bundler将Java应用程序打包为.app。 如果我在.app包中包装JRE7,我已设法运行该应用程序。 是否可以将.app(在Info.plist中)配置为指向JAVA_HOME环境变量定义的JRE? 如果我这样做,我得到“无法加载Java运行时环境”! 我试图以不同的方式配置JAVA_HOME,但没有成功!

任何人都可以提供任何帮助或建议吗?

appbundler应用程序可以使用应用程序包中的嵌入式Java 7 JRE,也可以使用/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home安装的Java 7 JRE(与Web浏览器插件使用的相同)。 他们不能使用在/Library/Java/JavaVirtualMachines下安装的JDK (或其他任何地方),他们肯定不能使用Java 6。

但是,你可以做的不是使用appbundler而是手工构建bundle,主要的可执行文件是一个shell脚本,它运行来自JAVA_HOMEjava命令行工具(可能会回到/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/JarsYourApp.app/Contents/Resources/Jars中的图标以及YourApp.app/Contents/Resources/icon.icns的以下内容:

     CFBundleDevelopmentRegion English CFBundleExecutable YourApp CFBundleGetInfoString My clever application CFBundleIconFile icon.icns CFBundleInfoDictionaryVersion 8.0 CFBundleName YourApp CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 8.0   

有关完整详细信息,请参阅GATE Developer启动程序,但请注意,这是一个稍微复杂的情况,因为.app脚本委托给另一个脚本,该脚本又从.app包之外的位置加载JAR文件。 然而,原则仍然是相同的。