Java
如何使用 OpenJDK 模擬 Oracle Java?
我有一個 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。但我很確定版本不會是您的應用程序要檢查的唯一內容,您會發現自己編寫了一個非常複雜的腳本來過濾很多不同的東西。這是一個想法,但我個人不建議實施它。