![这不是一个很酷的解决方案,但有效](https://linux22.com/image/85951/%E8%BF%99%E4%B8%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E5%BE%88%E9%85%B7%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%EF%BC%8C%E4%BD%86%E6%9C%89%E6%95%88.png)
我有一个java应用程序,它不工作:
Please install Java JRE 1.7.0_45 or a more recent version
我认为它会检查java版本和供应商。 openJDK 是否有特殊选项来模拟供应商。我不想安装 Oracle Java。
这是我的输出java -version
:
openjdk version "1.8.0_74"
OpenJDK Runtime Environment (build 1.8.0_74-b02)
OpenJDK 64-Bit Server VM (build 25.74-b02, mixed mode)
这不是一个很酷的解决方案,但有效
我已经在 OpenJDK 附近安装了 Oracle JRE。在 Manjaro (Arch) Linux 上非常简单
yaourt -S jre
安装完成后,它会要求您选择默认java。archlinux-java status
显示已安装的 Java 机器。我编写了一个小脚本来使用 oracle jre 运行我反复无常的应用程序:
#!/bin/sh
## Get first JRE from
jrepath=$(archlinux-java status | grep 'jre' -m1 )
## remove spaces
jrepath=$(echo $jrepath | grep -v -e '^$')
## Compose full path
jrepath="/usr/lib/jvm/$jrepath/bin/java"
## Check if it works DEBUG ${jrepath} -version
${jrepath} -jar path/to/STM32CubeMX
另外我想从脚本所在的文件夹运行应用程序:
## Where is script
pushd `dirname $0` > /dev/null
SCRIPTPATH=`pwd -P` ## -P to resolve symlinks
popd > /dev/null
${jrepath} -jar $SCRIPTPATH/STM32CubeMX
答案1
不,OpenJDK 不这样做。每个都有一个供应商属性来标识自己。
该值本身存储在 JAR 文件中,例如作为清单的一部分(请参阅Oracle 的文档例如)。由于 JAR 文件已签名,并且 API 通常禁止您更改系统属性,因此无需执行任何操作即可更改版本。
进一步阅读:
答案2
如果您的应用程序正在寻找 Oracle 的 Java,您是否考虑过这可能是有原因的?如果您认为 java 版本确实不重要,您可以在 java 中编写一个脚本前端,并在询问版本时让它模仿 Oracle java。但我非常确定版本不会是您的应用程序将检查的唯一内容,您会发现自己编写了一个非常非常复杂的脚本来过滤很多不同的内容。这是一个想法,但我个人不建议实施。