Java

如何使用 OpenJDK 模擬 Oracle Java?

  • March 20, 2016

我有一個 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

不,OpenJDK 不這樣做。每個都有一個供應商屬性來標識自己。

值本身儲存在 JAR 文件中,例如,作為清單的一部分(例如,參見Oracle 的文件)。由於 JAR 文件已簽名,並且 API 通常禁止您更改系統屬性,因此幾乎無需更改版本。

進一步閱讀:

如果您的應用程序正在尋找或 Oracle 的 Java,您是否考慮過它可能是有原因的?如果您認為 java 版本真的無關緊要,您可以為您的 java 編寫一個腳本前端,並在詢問版本時讓它模仿 Oracle java。但我很確定版本不會是您的應用程序要檢查的唯一內容,您會發現自己編寫了一個非常複雜的腳本來過濾很多不同的東西。這是一個想法,但我個人不建議實施它。

引用自:https://unix.stackexchange.com/questions/271119