5

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

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

4

2 回答 2

12

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-InsJRE )。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 文件。不过原理还是一样的。

于 2013-07-09T10:59:07.223 回答
0
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 查看隐藏文件

于 2020-11-15T15:16:01.593 回答