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.
,您可以选择卸载其他版本
- 转到控制面板主页
- 高级系统设置
- 环境变量
- 选择JAVA_HOME
- 编辑
- 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 上正确混音,您需要执行以下操作
- 下载并安装任何版本的 JDK 1.8 或更高版本。
- 打开环境变量,创建一个名为JAVA_HOME的环境变量,并将值设置为JDK安装路径。
C:\Program Files\Java\jdk1.8.0_162
确保您没有在值中添加 \bin
。
- 在您的系统路径变量中,放置一个 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.
- 现在关闭终端并重新打开,然后 运行 之前的命令。
根据 Cordova 官方文档,它仅支持 JDK 1.8 直到日期(2018 年 4 月)。或者 cordova 中的版本检测脚本可能有问题。
您的版本可能高于 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代码的错误。
我所做的是:
- 保持 JDK 10
- 安装 JDK 8
- 把
JAVA_HOME
改成JDK8的路径,把path
变量也改一下。
- 重新启动 "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,我遇到了同样的问题。对我来说,以下工作:
- 设置JAVA_HOME指向JDK 8.(之前很多回答都提到过。)
和
- 从 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 版本...
遇到同样的问题,经过一些调试找到解决方案。
- 正确设置 JAVA_HOME。
- 使用新 jdk (1.8) 版本更改用户变量 PATH 值。
- 使用新 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.*:
- 确保 JAVA_HOME 和 JRE_HOME 已设置(确保它指向 Java 1.8.*)
- 在 PATH 中,确保添加
%JAVA_HOME%\bin
或 C:\Program Files\Java\jdk1.8.0_251\bin
- 问题来源:我的 JDK 11 安装在顶部添加了两个 PATH 条目,优先或覆盖指向 JDK 1.8 的
%JAVA_HOME%\bin
PATH。*
如果没有,请不要添加,查找其他可能覆盖 %JAVA_HOME%\bin
的 PATH 条目
- 单击覆盖条目的“下移”,直到它们低于
%JAVA_HOME%\bin
%JAVA_HOME%\bin
指向 Java 8 的 PATH 现在将优先于指向 JDK 11[= 的其他 PATH 条目24=]
- 保存,打开一个新的终端,运行
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
。而且效果非常好!
我在 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.
- 转到控制面板主页
- 高级系统设置
- 环境变量
- 选择JAVA_HOME
- 编辑
- 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 上正确混音,您需要执行以下操作
- 下载并安装任何版本的 JDK 1.8 或更高版本。
- 打开环境变量,创建一个名为JAVA_HOME的环境变量,并将值设置为JDK安装路径。
C:\Program Files\Java\jdk1.8.0_162
确保您没有在值中添加\bin
。
- 在您的系统路径变量中,放置一个 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.
- 现在关闭终端并重新打开,然后 运行 之前的命令。
根据 Cordova 官方文档,它仅支持 JDK 1.8 直到日期(2018 年 4 月)。或者 cordova 中的版本检测脚本可能有问题。
您的版本可能高于 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代码的错误。 我所做的是:
- 保持 JDK 10
- 安装 JDK 8
- 把
JAVA_HOME
改成JDK8的路径,把path
变量也改一下。 - 重新启动 "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,我遇到了同样的问题。对我来说,以下工作:
- 设置JAVA_HOME指向JDK 8.(之前很多回答都提到过。) 和
- 从 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 版本...
遇到同样的问题,经过一些调试找到解决方案。
- 正确设置 JAVA_HOME。
- 使用新 jdk (1.8) 版本更改用户变量 PATH 值。
- 使用新 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.*:
- 确保 JAVA_HOME 和 JRE_HOME 已设置(确保它指向 Java 1.8.*)
- 在 PATH 中,确保添加
%JAVA_HOME%\bin
或C:\Program Files\Java\jdk1.8.0_251\bin
- 问题来源:我的 JDK 11 安装在顶部添加了两个 PATH 条目,优先或覆盖指向 JDK 1.8 的
%JAVA_HOME%\bin
PATH。*
如果没有,请不要添加,查找其他可能覆盖 %JAVA_HOME%\bin
- 单击覆盖条目的“下移”,直到它们低于
%JAVA_HOME%\bin
%JAVA_HOME%\bin
指向 Java 8 的 PATH 现在将优先于指向 JDK 11[= 的其他 PATH 条目24=]
- 保存,打开一个新的终端,运行
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
。而且效果非常好!