2017-04-17 279 views
1

我在Windows 10上,在Windows上使用Ubuntu上的Bash。 我想用ionic build android,但它給了我下面的錯誤:java版本無法識別

logic-error

我實際安裝JDK 1.8.0_121並設置JAVA_HOME及其PATH如下我~/.bash_profile

export JAVA_HOME=/mnt/c/"Program Files"/Java/jdk1.8.0_121 
export PATH=${PATH}:/mnt/c/"Program Files"/Java/jdk1.8.0_121/bin 

當我使用java -version時,會發生以下輸出:

openjdk version "9-internal"
OpenJDK Runtime Environment (build 9-internal+0-2016-04-14-195246.buildd.src)
OpenJDK 64-Bit Server VM (build 9-internal+0-2016-04-14-195246.buildd.src, mixed mode)

因此Bash不能識別我的Java版本。有趣的是,這java.exe -version提供了正確的輸出:

java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

我使用的是Windows' CMD>java -version時得到相同的(正確)的輸出。

/Windows/System32/syswow64中沒有任何java文件。

我想我安裝了「openjdk版本9」,這是因爲java -version直接通過apt install openjdk-9-jdk-headless有一天顯示。這可能會導致這種麻煩嗎?因爲當我嘗試update-alternatives --config java我得到以下的輸出:(沒有選項來選擇jdk1.8.0_121)

Output

還是我必須設置JAVA_HOME及其以不同的方式PATH?或者你有什麼其他解決方案?

回答

0

在bash中,運行which java來檢查哪個java版本的bash正在運行。

也許它不會是1.8,那是因爲(我相信)在你的PATH中,openjdk 9 dir在jdk 1.8之前。

因此請檢查您的PATH變量(通過執行echo $PATH)並查看目錄的順序。

如果OpenJDK的JDK目錄1.8之前出現(它可能不會,因爲你設置1.8 DIR是最後一個),你可以只設置PATH這樣:

export PATH=/mnt/c/"Program Files"/Java/jdk1.8.0_121/bin:${PATH} 

那麼bash將看對於jdk 1.8 dir中的java之前的任何其他地方。


如果這不起作用,你可以讓一個別名(不是一個完美的解決方案,我承認):

alias java='/mnt/c/\"Program Files\"/Java/jdk1.8.0_121/bin/java' 

# or without escaping double quotes (not sure which one works) 
alias java='/mnt/c/"Program Files"/Java/jdk1.8.0_121/bin/java' 

如果我沒有記錯,雙引號必須別名內逃脫。我不是在電腦前測試,所以試着用,不用轉義。

+0

(對不起,對於雙重發布...)如您所說,echo $ PATH現在首先顯示jdk1.8方向。不幸的是'java -version'再次導致openjdk9。'哪個java'仍然給/ usr/bin/java回來。你有什麼其他的建議? –

+0

我更新了答案 – 2017-04-18 10:42:27

+0

我試了兩個別名。第一個錯誤的語法,我想。我必須在第二個末尾添加「.exe」。之後'java -version'返回了正確的版本。然後我再次嘗試'離子模擬android',它返回與我的問題(「錯誤:要求檢查失敗,JDK 1.8或更高版本」)相同的錯誤。之後,在使用別名的同時,'which java'命令仍然像以前一樣以exactely的形式返回'/ usr/bin/java'。這個目錄似乎是Ubuntu子系統的一部分。你能想出一個解決方案嗎?還是你有其他想法? –