2017-04-17 225 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子系统的一部分。你能想出一个解决方案吗?还是你有其他想法? –