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

Cordova : Requirements check failed for JDK 1.8 or greater

我在 Windows 7 OS 中使用 Cordova 6.4.0,但是当我尝试构建 android 版本时出现此错误:

Java Home 变量已正确设置为 JDK 路径,但我不知道为什么会出现此问题。有什么建议吗?

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

卸载旧版本的 JDK 会有效。但我想这可能是一种解决方法。我遇到了同样的问题,并注意到 JDK 的新版本和旧版本 JDK 路径都已在 'path' 环境变量中被提及。

'path' 环境变量中删除旧版本 JDK 路径对我有用。希望对大家也有帮助。

在我的例子中 JAVA_HOME 指向 C:\Program Files (x86)\Java\jdk1.7.0_55

当我在 cmd 中写入 where java 时,它输出 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.* 一个。

我刚刚将旧的 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)中,这可以通过在

中选择一个Java 1.8 SDK来解决
sudo update-alternatives --config javac

直接更改JAVA_HOME环境变量似乎没有任何效果。

编辑:回应评论: 这可能与以下事实有关:新的 Debian(显然 Ubuntu)Java 安装通过包管理器不使用 JAVA_HOME 环境变量来确定 JRE 的位置。有关详细信息,请参阅 this and this post

只需确保可以从 PATH 环境变量和 JAVA_HOME 访问相同的 JDK 版本(即本例中的 1.8)。例子: 如果 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 的可变值

这个错误信息让用户感到困惑,成功屏幕如下。

错误消息使用户尝试使用 JAVA_HOME 配置修复构建失败。 但真正的问题不仅仅在于 JAVA_HOME.

我通过 JAVA_HOME 中的正确配置和 "system variable" 中的正确路径解决了这个问题。

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

有用的是卸载 jdk 9 并重新安装 jkd 8.x

在 Mac 上,为了卸载请转到终端并按照以下步骤操作:

cd /Library/Java/JavaVirtualMachines

sudo rm -rf jdk-9.0.1.jdk

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

MadNeox 编辑 post 的答案是 correct.I 面临类似的问题 我安装了 jdk 9 以及 1.8 版本

我首先尝试保留 jdk 9 并删除 1.8,它会显示错误 Requirements check failed

然后我尝试卸载 jdk9 并重新安装 1。这次它显示 运行 javac-version

失败

在环境变量上玩了一段时间后,我终于找到了解决方案

此时我的系统只有jdk 1.8 Cordova version:7.1.0

-打开环境变量选项卡 - 在用户变量下创建一个新变量 PATH - 给它以下值 C:\Program Files\Java\jdk1.8.0_151\bin(可能会根据您安装 jdk 的位置而改变)

这应该可以解决您的问题 希望对你有帮助

虽然答案已经给出,但我确实花了一些时间才弄清楚我哪里出错了,所以决定 post 希望它能节省别人的时间

如果你同时安装了 jdk8 和 jdk9,你必须检查哪个版本是

在路径中 JAVA_HOME 指向的位置。

在您发布的日志中,我看到 JAVA_HOME 正在通往 JDK9。

修改您的 globel JAVA_HOME env var 以针对 JDK8,或者如果您只想将 jdk8 用于 cordova,则可以在使用 cordova CLI 之前在 powershell 中更改 JAVA_HOME:

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

**cordova build android**

您不必卸载任何更高版本的 sdk。只需安装 jdk1.8。0_161 或者如果已经安装则不要安装。

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

这样就不用卸载高版本了,问题就解决了。

似乎 Android SDK 不支持 Java 9。如果你不想一直回到 JDK 1.8,请降级到 8,这对我来说很荒谬. JDK 8 对我有用,但请务必将 JAVA_HOME 环境变量正确设置为 JDK 安装位置。

要在 Windows 上正确混音,您需要执行以下操作

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

  1. 在您的系统路径变量中,放置一个 semi-colon ; 并将此值添加到系统路径,例如 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.

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

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

Cordova: Installing the requirements

您的版本可能高于 8,但 Cordova 仅支持 JDK 1.8。查看此 link Cordova Documentation

我看了一下实际检查 java 版本号的代码段。查找以下内容:module.exports.check_java in platforms/android/cordova/lib/check_reqs.js。在第 220 行。您将看到团队留下的正则表达式和评论,Java 10 将在未来得到支持。

现有的正则表达式在运行对最新版本的java如Java10时会失败。那是因为Java8或9是保存为以下格式:1.[8-9].** 但 Java 10 保存为 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);

我的解决方案:

您不必卸载当前版本的 JRE 或 JDK,因为安装程序会在特定文件夹中安装每个版本。

1-安装版本Java8Follow this link

2- 更新您的环境变量:

  • JAVA_HOME 如果您安装了 JDK
  • JRE_HOME 如果你安装了 JRE

将它们指向安装 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 变量是系统变量。
  • 确保将它们添加到您的用户路径中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代码的错误。 我所做的是:

  1. 保持 JDK 10
  2. 安装 JDK 8
  3. JAVA_HOME改成JDK8的路径,把path变量也改一下。
  4. 重新启动 "cmd" 和 运行 cordova build

错误消失了!

如果您安装了多个 Java 版本并且需要保留这些版本,您需要检查以下事项:

  • JAVA_HOME指向你的jdk1.8
  • 在您的 PATH 变量中,您需要检查 jdk1.8\bin 路径 其他 jdk\bin 路径
  • 之前

如果你有多个版本的 JDK 你可以 运行

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.It 在我创建 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_201 并添加时得到了解决"C:\Program Files\Java\jdk1.8.0_201\bin" 在 路径 变量

我在 Windows 10 上安装了 (Open)JDK 8 和 11,我遇到了同样的问题。对我来说,以下工作:

  1. 设置JAVA_HOME指向JDK 8.(之前很多回答都提到过。) 和
  2. 从 PATH 中删除 (!) JDK 11 事实证明——尽管显示指向 JDK 8 的 JAVA_HOME 路径——实际上是 Cordova 访问了包含在 PATH 中的 JDK 11,这使得 Java 版本检查失败。

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

Windows(仅)和 Webstorm IDE 2019.2

出现问题

在版本 2019.2 中,Webstorm 有一个问题,因为它在内部使用 open jdk 作为 %JAVA_HOME% 变量而不是(来自 os)目标 java jdk.

就我而言(是的,它很旧,它是一个旧的 cordova 项目...)

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

$ java -version
java version "1.8.0_221"

但在 Webstorms 终端中执行 java -version

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

稍后(今天)发布的补丁程序版本 2019.2.1 附带了一个修复程序。 现在 Webstorm 使用 os %JAVA_HOME% 变量,并且 java -version 输出在两种情况下都是相同的。

希望对大家有所帮助!

今天,当我 运行 通过终端命令 ionic cordova build --release android 构建 Ionic App 时,我的 Mac OS 中也出现了这个错误 Cordova : Requirements check failed for JDK 1.8 or greater

下面的命令解决了我的问题:-

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

希望对以后的人有所帮助!

我正在使用 windows 并且有两个 jdk 1.8 和 14 版本...

遇到同样的问题,经过一些调试找到解决方案。

  1. 正确设置 JAVA_HOME。
  2. 使用新 jdk (1.8) 版本更改用户变量 PATH 值。
  3. 使用新 jdk (1.8) 版本更改用户变量 PATH 值。

它解决了

当 java 的默认路径设置为 Java 8 或 JDK 1.8.*

以外的版本时会发生错误

对于我的情况,我在安装 Java 8

之后安装了 Java 11

你可以通过运行ning测试:

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 路径指向 Java 8 个二进制文件而不是

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

  1. 确保 JAVA_HOME 和 JRE_HOME 已设置(确保它指向 Java 1.8.*)

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

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

如果没有,请不要添加,查找其他可能覆盖 %JAVA_HOME%\bin

的 PATH 条目

  1. 单击覆盖条目的“下移”,直到它们低于 %JAVA_HOME%\bin

%JAVA_HOME%\bin 指向 Java 8 的 PATH 现在将优先于指向 JDK 11[= 的其他 PATH 条目24=]

  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)

已修复!

安装了多个 Java 版本且无需卸载的 MacOS 答案

显示我安装的 Java 版本:

$ ls -l /Library/Java/JavaVirtualMachines/

设置为我的jdk1.8版本:

$ 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 版,如果您有 later 版本,则会抛出此消息。

接下来是我之前的尝试,这些尝试使我得到了上述答案,然后它起作用了...... 根据安装的内容,您可能需要做一些不同的事情,所以这些注释可能会有所帮助:


设置成我的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 的命令对我有用。

这个答案的Ubuntu/DebianLinux版本是安装openjdk 8并通过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

我昨天 运行 在使用我的新笔记本电脑(全新安装)时遇到了同样的问题,唯一的例外是 Cordova 对我说的:

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

检测到的版本:null 是我的实际问题!

当查看 check_reqs.js(如上文 post 中所述)时,您会注意到这就是魔法发生的地方:它包含一个函数“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”版本,它不包含 “all” 属性用于输出。因此,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 。而且效果非常好!