当前位置: 首页 > 面试题库 >

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

逄学潞
2023-03-14
问题内容

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

谁能提供任何帮助或建议?


问题答案:

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

但是,您 可以
做的是不使用appbundler,而是手动构建捆绑包,主要的可执行文件是运行java命令行工具的shell脚本JAVA_HOME/Library/Internet Plug-Ins如果JAVA_HOME未设置,则退回到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启动器。不过请注意,这是一个较为复杂的情况,因为.app脚本委托给另一个脚本,该脚本又从.app捆绑包外部的位置加载JAR文件。然而,原理保持不变。



 类似资料:
  • 我已经用编辑了服务器上的文件 我已经重新登录,以下是输出的所有路径: 但是当我尝试运行我的spring boot服务器时,它给了我:

  • 我将指向。很好用。之后,解压ant并设置与ant相关的环境变量,在键入后,得到以下错误消息 我搜索了这个论坛。看起来一个解决方案是将Java指向JDK,而不是JRE。我不确定这是否应该是解决办法。换句话说,一般来说,JAVA_HOME应该指向哪一个?JDK还是JRE?

  • 然后卸载OpenJDK并安装Oracle JDK8,现在运行时 JAVA_HOME环境变量定义不正确运行此程序需要此环境变量nb:JAVA_HOME应该指向JDK,而不是JRE 我正在运行Linux Mint 19,我确实遇到了一些与这个问题相关的Stackoverflow问题。大多数与Windows有关,一些与Linux有关。建议运行的Linux

  • 您好,感谢您能提供的任何帮助。 最重要的是,我已经重新安装了java和maven,并多次重启了我的计算机和命令行。

  • 尽管我已经将JAVA_HOME配置到了我认为正确的目录中,但在Windows10中我还是得到了下面的错误。我知道有类似的问题,但似乎没有一个明确的解决方案来解决这个Windows10。 错误: 验证CMD中的变量:

  • 我下载了jdk-9.0.1_linux-x64_bin。焦油gz和jre-9.0.1_linux-x64_bin。焦油来自链接的gzhttp://www.oracle.com/technetwork/java/javase/downloads/index.html.将它们提取出来,并在/usr/local/java中发布。然后编辑/etc/profile以添加 整个文件看起来像 然后输入以下命令