Cordova: JDK 1.8或更高版本的需求检查失败

我在 Windows7操作系统中使用 Cordova 6.4.0,但是我在尝试构建 android 版本时遇到了这个错误:

Issue description

The Java Home variable is setted correctly to the JDK path, but I don't know why I am getting this issue. Any suggestions please ?

261249 次浏览

卸载所有以前的 JDK,包括1.8 安装 JDK 1.8

Uninstalling older versions of JDK would have worked. But it may be a workaround i guess. I faced the same issue and noticed that both new version of JDK and older version JDK path has been mentioned in 'path' environmental variable.

'path的环境变量中删除旧版本的 JDK 路径对我来说很有用,希望对其他人也有帮助。

在我的例子中,JAVA _ HOME 指向 C: Program Files (x86) Java jdk1.7.0 _ 55

当我在 cmd 中编写 爪哇在哪时,它输出 C: Program Files (x86) JAVA jdk1.7.0 _ 55和 JAVA.exe 路径,我将 JAVA _ HOME 变量从环境变量改为 C: Program Files Java jdk1.8.0 _ 20并且它工作了,所以看起来我有2个 jdk 实例,Cordova 需要 v1.8。* one.

我只是用 _重新命名了旧的 JDK 文件夹,以防万一我需要它,它起作用了。

C:\Program Files (x86)\Java\_jdk1.7.0_40
C:\Program Files (x86)\Java\_jre7

我发现我的路径环境变量指向 JAVA 1.7,而 JAVA _ HOME 指向1.8,所以我将路径变量编辑为1.8,这样就可以了。

在 Linux (Debian/Ubuntu)中,这个问题可以通过在

sudo update-alternatives --config javac

直接改变 JAVA_HOME env 变量似乎没有任何效果。

编辑: 回应评论: 这可能与通过包管理器安装的新 Debian (显然是 Ubuntu) Java 不使用 JAVA_HOME环境变量来确定 JRE 的位置有关。有关更多信息,请参见 this这篇文章

只要确保相同的 JDK 版本(在本例中是1.8)可以从 PATH环境变量和 JAVA_HOME访问就可以了。例如: 如果 那就 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_152 PATH变量还应该包含上述路径,并且在 PATH变量中已经提到的 if JDK/JRE 的任何其他路径(如果有的话)之前包含重要的路径。如果没有其他应用程序正在使用不同版本的 Java,您可以选择卸载其他版本。

  1. 去控制面板主页
  2. 高级系统设置
  3. 环境变数
  4. 选择 JAVA _ Home
  5. 编辑
  6. 1.8的变量值

此错误消息使用户感到困惑,成功屏幕如下。cordova build success

The error message make user try to fix the build fail with JAVA_HOME config. 但是真正的问题不仅仅在于 JAVA _ HOME。

我用 JAVA _ HOME 中的正确配置和“ system variable”中的 Path 修复了这个问题。 enter image description here

希望可以帮助解决这个问题,但不能重新安装 JDK。

卸载 jdk9和重新安装 jkd8.x 是可行的

在 Mac 上卸载到终端并按照以下步骤操作:

cd /Library/Java/JavaVirtualMachines


sudo rm -rf jdk-9.0.1.jdk

然后从 Oracle 下载. dmg 包安装 jdk 8.x。

MadNeox 的回答是正确的,我也面临着类似的问题 我安装了 jdk 9和1.8版本

我首先尝试保留 jdk 9并删除1.8,它将显示一个错误需求检查失败

Then I tried by uninstalling jdk9 and reinstalling 1. this time it was showing failed to run javac-version

在处理环境变量一段时间后,我终于得到了解决方案

此时,我的系统只有 jdk 1.8 Cordova 版本: 7.1

- 打开环境变量标签 - 在用户变量下创建一个新的变量 PATH - 赋予它以下值 C: Program Files Java jdk1.8.0 _ 151 bin (可能会根据您安装 jdk 的位置而改变)

这应该能解决你的问题 希望能有帮助

尽管已经给出了答案,但我还是花了一些时间才弄清楚自己哪里做错了,所以决定发布这篇文章,希望能节省其他人的时间

如果同时安装了 jdk8和 jdk9,则必须检查 wich version is

路径和 JAVA _ HOME 指向的位置。

In the log you posted, I see that JAVA_HOME is leading to the JDK9.

修改你的通用 JAVA _ HOME env var 以面向 JDK8,或者你可以在使用 cordova CLI 之前在 powershell 中修改 JAVA _ HOME,如果你只想对 cordova 使用 JDK8:

$env:JAVA_HOME="C:\Program Files\Java\jdk1.8.0_151"


**cordova build android**

您不必卸载任何更高版本的 sdk,只需安装 jdk1.8.0 _ 161即可,如果已经安装,则不需要卸载。

现在只需设置 JAVA_HOME USER 变量(不是系统变量) ,如下图所示。

enter image description here

这样你就不必卸载更高的版本,问题也就解决了。

看起来 Android SDK 不支持 Java9。如果你不想回到 JDK 1.8,那就降级到8,这对我来说太荒谬了。JDK 8适合我,但是请确保正确地将 JAVA _ HOME 环境变量设置为 JDK 安装的位置。

要想在 窗户上获得正确的混音效果,你需要做以下工作

  1. 下载并安装 JDK 1.8或更高版本。
  2. 打开环境变量,创建一个名为 JAVA _ Home的环境变量,并将值设置为 JDK 安装路径。 C:\Program Files\Java\jdk1.8.0_162 确保值中没有添加 \bin

enter image description here

  1. 在您的系统路径变量中,放置一个分号 ;并将此值添加到系统路径例如 C:\Program Files\Java\jdk1.8.0_162\bin;,这里添加了 \bin

Note: The environment variables are tricky.They are supposed to be closed by a ; before opening another. That is why we put one before adding the value and one after the value to close it.

enter image description here

  1. 现在关闭终端并重新打开,然后运行前面的命令。

根据官方 Cordova 文档,它只支持 JDK 1.8,直到日期(2018年4月) 。或者 Cordova 中的版本检测脚本可能有问题。

Cordova: 安装需求

You may have a version that is greater than 8 but Cordova only supports JDK 1.8. View this link 科尔多瓦文件

I took a look at the piece of code that actually checks for the version number of your java. Look for the following: module.exports.check_java in Platform/android/cordova/lib/check _ reqs. js. on line 220. You will see a regex and comment left by the team that Java 10 will be supported in the future.

当现有的正则表达式针对最新版本的 Java (如 Java10)运行时,它将失败。这是因为 Java8或9以下列格式保存: 1。[8-9].但是 Java10被保存为10。* * 和正则表达式查找格式为1的版本。[8-9].**

// Let's check for at least Java 8, and keep it future proof so we can support Java 10
var match = /javac ((?:1\.)(?:[8-9]\.)(?:\d+))|((?:1\.)(?:[1-9]\d+\.)(?:\d+))/i.exec(output);

我的解决办法是:

You don't have to uninstall your current version of the JRE or JDK since the installer installs each version in a specific folder.

1-安装版本 Java8点击这个链接

2-更新您的环境变量:

  • 如果安装了 JDK,请使用 JAVA _ HOME
  • 如果安装了 JRE,则为 JRE _ HOME

通过将它们指向安装 JRE 8和 JDK 8的位置。

// On my machine
C:\Program Files\Java\jdk1.8.0_171 // JAVA_HOME
C:\Program Files\Java\jre1.8.0_171 // JRE_HOME

打开一个新的终端会话并运行失败的命令。现在应该可以工作了。

没用吗?

如果由于其他原因失败,可能的调试过程:

  • 确保 JAVA _ HOME 和 JRE _ HOME 变量是 System 变量。
  • Ensure they are added to your User's Path Add variables to Path

有时改变路径和 java-home不工作。您需要添加

C:\Users\[your user]\AppData\Local\Android\Sdk\platform-tools
C:\Users\[your user]\AppData\Local\Android\Sdk\tools

环境变量路径。

我同意@Hozington 的观点。 这应该是检测 Java 版本的 Cordova 代码的 bug。 我所做的是:

  1. Keep the JDK 10
  2. 安装 JDK 8
  3. JAVA_HOME更改为 JDK8的路径,并同时更改 path变量。
  4. 重新启动“ cmd”并再次运行 cordova build

错误消失了!

if you have multiple Java versions installed and need to keep those, you need to check following things:

  • 指向 jdk1.8的 JAVA _ HOME
  • 在 PATH 变量中,需要检查 jdk1.8 bin 路径是 之前还是其他 jdk bin 路径

if you have many version of JDK you can run

export JAVA_HOME="/usr/local/env/java/jdk1.8.0_131.jdk/Contents/Home/"

在构建 cordova 之前,使用特定版本的 jdk:)

MAC: 导航到:/Library/Java/JavaVirtualMachines 确保只有 jdk1.8.0 _ 201. jdk 如果有很多,那么删除其他 JDK

我在使用 jdk1.8.0 _ 201时遇到了同样的问题。当我创建 JAVA _ HOME = C: Program Files JAVA jdk1.8.0 _ 201并在 路径变量中添加“ C: Program Files JAVA jdk1.8.0 _ 201 bin”时,问题得到了解决

我在 Windows10上安装了(Open) JDK8和11,我也有同样的问题。对我来说,以下方法奏效了:

  1. 将 JAVA _ HOME 设置为指向 JDK 8 还有
  2. 拿开尽管显示了指向 JDK 8的 JAVA _ HOME 路径,但实际上是 Cordova 访问包含在 PATH 中的 JDK11,这使得 Java version check fail.

这是一个老问题,但因为我刚刚有同样的问题,但错误有另一个来源,这里有一个简短的答案。

问题发生在 Windows (仅)和 Webstorm IDE 2019.2上

In the version 2019.2 Webstorm had an issue, because it internally used open jdk for the %JAVA_HOME% variable instead of the (from the os) targeted java jdk.

在我的情况下(是的,它是旧的,这是一个老 Cordova 项目...)

在 Windows cmd.exe 中执行 java -version:

$ java -version
java version "1.8.0_221"

但在 Webstorms 终端执行 java -version:

$ java -version
openjdk version "11.0.3" 2019-04-16
// more output

A fix came with the patch released later (today), version 2019.2.1. 现在 Webstorm 应该使用 os% JAVA _ HOME% 变量,而且在这两种情况下 java -version输出是相同的。

希望能帮到别人!

今天我也得到了这个错误 Cordova : Requirements check failed for JDK 1.8 or greater在我的 Mac 操作系统,而建立爱奥尼亚应用程序时,我运行命令 ionic cordova build --release android通过终端。

以下命令解决我的问题:-

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home"

希望将来能帮到别人!

I'm using windows and having two jdk 1.8 and 14 version something ...

面对同样的问题,经过一番调试后找到了解决办法。

  1. 正确设置 JAVA _ HOME。
  2. Change the user variable PATH value with new jdk (1.8) version.
  3. 使用新的 jdk (1.8)版本更改用户变量 PATH 值。

解决了

当 Java 的默认路径设置为 Java 8或 JDK 1.8以外的版本时,就会发生错误。*

For my case, I have installed Java 11 after installing Java 8

You can test by running:

java -version

对我来说,它又回来了:

java version "11.0.8" 2020-07-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)

为了解决这个问题,我们需要确保 Java 路径指向 Java8二进制文件

假设您已经安装了 Java8或 JDK 1.8. * :

  1. 确保设置了 JAVA _ HOME 和 JRE _ HOME (确保它指向 JAVA 1.8. *)

Env variable

  1. 在 PATH 中,确保添加了 %JAVA_HOME%\binC:\Program Files\Java\jdk1.8.0_251\bin

enter image description here

  1. 问题的根源: 我的 JDK 11安装在顶部添加了两个 PATH 条目,优先或覆盖指向 JDK 1.8的 %JAVA_HOME%\bin PATH。*

如果没有,请不要添加它们,找到可能覆盖 %JAVA_HOME%\bin的其他 PATH 条目

enter image description here

  1. 对于重写项,单击“向下移动”,直到它们低于 %JAVA_HOME%\bin

指向 Java8的 %JAVA_HOME%\bin PATH 现在将优先于指向 JDK11的其他 PATH 条目

enter image description here

  1. 保存,并打开一个新的终端,然后运行
java -version

对我来说,它又回来了:

java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

Fixed!

MacOS 应答器安装了多个 Java 版本,无需卸载

给我看看我安装了什么版本的 Java:

$ ls -l /Library/Java/JavaVirtualMachines/

To set it to my jdk1.8 version :

$ ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/bin/javac /usr/local/bin/javac

设置为我的 jdk11版本:

$ ln -s /Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home/bin/javac /usr/local/bin/javac

-------------------------------------------------------------------------

请注意,不管消息说什么,它似乎意味着它想要1.8版本,如果您有 回见版本,则抛出此消息。

What follows is my earlier attempts which lead me to the above answer, which then worked ... You might need to do something different depending on what's installed, so maybe these notes might help :


设置为我的 jdk1.8版本

$ export PATH=/Library/Java/JavaVirtualMachines/jdk-11.0.7.jdk/Contents/Home/bin/javac:$PATH

设置为我的 jdk11版本

$ export PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/bin/javac:$PATH

... 但实际上这不起作用,因为 /usr/bin/javac仍然是第一个运行的:

$ which javac
/usr/bin/javac

... 看看什么跑在第一的道路上:

$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

这意味着我可以重写 /usr/bin/javac... 看到答案顶部的命令..。
使用 ln将其设置为 jdk1.8的命令(在这个答案的顶部)对我来说很有用。

The Ubuntu/Debian Linux version of this answer is to install openjdk 8 and set the default via update-alternatives


# install (open)jdk 8
sudo apt-get install -y openjdk-8-jdk


# update java compiler and set to 1.8
sudo update-alternatives --config javac


# update java runtime (optional)
sudo update-alternatives --config java


# Also set $JAVA_HOME and $PATH to your .bashrc (optional)
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
echo 'export PATH="$PATH:$JAVA_HOME/bin' >> ~/.bashrc


# load in current bash session
source ~/.bashrc

昨天,我的新笔记本电脑(全新安装)也遇到了同样的问题,唯一的例外是,科尔多瓦对我说:

Requirements check failed for JDK 8 ('1.8.*')! Detected version: null

那个 检测版本: 无效对我来说才是真正的问题!

当查看 check _ reqs 时。Js (正如上面一篇文章中提到的) ,你会注意到这就是奇迹发生的地方: 它包含一个函数“ check _ Java”,在某些时候,它使用 “ Execa”来检索已安装的 Java 版本:

return execa('javac', ['-version'], { all: true })
.then(({ all: output }) => {
// Java <= 8 writes version info to stderr, Java >= 9 to stdout
const match = /javac\s+([\d.]+)/i.exec(output);
return match && match[1];
}

对我来说,问题是,不管出于什么原因,我有一个过时的版本的“ Execa”,它不包含用于输出的 “所有”属性。因此,检索到的 Java 版本总是未定义的。 通过将 "execa": "^4.0.2"添加到 package.json 中的依赖项并再次运行“ npm i”,我能够修复这个问题。

我只是想分享一下我的见解。

在 Ubuntu/Debian 中,只有一行,没有提示符

sudo update-java-alternatives -s $(sudo update-java-alternatives -l | grep 8 | cut -d " " -f1)

如果以前的任何答案都不起作用,我就会遇到同样的问题,在我的机器上下载并设置正确的路径。但是这个问题没有得到解决,直到我编辑了路径并在路径的开头(在路径的顶部)创建了 %JAVA_HOME%/bin。而且效果非常好!

Last version of JDK on top of the path

You need to change JDK, and not 爪哇咖啡, or at least in this situation.

To get it, you can get from Oracle, but it asked me to create an account. Therefore, I got it from https://repo.huaweicloud.com/java/jdk/8u152-b16/ while looking for Java 8u152. Next, after installation, you most probably have 2 of them.

Open vim ~/.zshrc (MacBook), and then my setup is such:

export PATH=$PATH:~/Library/Android/sdk/platform-tools
export ANDROID_HOME=~/Library/Android/sdk
export PATH="$HOME/.bin:$PATH"
export PATH="~/Library/Android/sdk/platform-tools":$PATH


export JAVAC_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home/
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
alias javac8='export JAVA_HOME=$JAVAC_HOME'
alias java11='export JAVA_HOME=$JAVA_11_HOME'
alias java8='export JAVA_HOME=$JAVA_8_HOME'

更多信息如何设置不同的 Java版本: How to set or change the default Java (JDK) version on macOS?

然后,您可以从终端使用 java8javac8java11:

myuser@DMB MoveUp % java -version
java version "18.0.1.1" 2022-04-22
Java(TM) SE Runtime Environment (build 18.0.1.1+2-6)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)
myuser@DMB MoveUp % javac -version
javac 18.0.1.1
myuser@DMB MoveUp % java11
myuser@DMB MoveUp % java -version
java version "11.0.14" 2022-01-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.14+8-LTS-263)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.14+8-LTS-263, mixed mode)
myuser@DMB MoveUp % javac8
myuser@DMB MoveUp % javac -version
javac 1.8.0_152

javac 1.8.0_152 is what you need to have on javac -version to fix the problem. After that, I was able to proceed further with cordova emulate android on MacBook, which initially returned Requirements check failed for JDK 1.8.x! Detected version: 18.0.1. Check your ANDROID_SDK_ROOT / JAVA_HOME / PATH environment variables..

根据您的情况,您可能应该将 Cordova android 升级到 > = 10.0.0的版本。如果对 Java > 8使用 Cordova < 10.0.0,或者对 Java < = 11使用 Cordova Cordova > = 10.0.0,就会得到这个错误。 Cordova docs: https://cordova.apache.org/docs/en/latest/guide/platforms/android/#installing-the-requirements