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

时间:2016-11-16 09:23:27

标签: cordova cordova-cli

我在Windows 7操作系统中使用Cordova 6.4.0,但是一旦我尝试构建Android版本,我就会收到此错误:

Issue description

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

39 个答案:

答案 0 :(得分:46)

我想我找到了问题的解决方案。我会发布答案,以防万一有人面临同样的问题。

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

答案 1 :(得分:29)

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

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

cd /Library/Java/JavaVirtualMachines

sudo rm -rf jdk-9.0.1.jdk

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

答案 2 :(得分:28)

您不必卸载任何更高版本的sdk。只需安装jdk1.8.0_161,如果已经安装,请不要安装。

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

enter image description here

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

答案 3 :(得分:16)

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

'path'删除旧版JDK路径环境变量对我有用。希望它也可以帮助别人。

答案 4 :(得分:15)

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

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

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

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

答案 5 :(得分:10)

您的版本可能大于8但Cordova仅支持JDK 1.8。查看此链接Cordova Documentation

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

现有的正则表达式在针对最新版本的Java(如Java 10)运行时将失败。这是因为Java 8或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-安装Java 8版本Follow this link

2-更新您的环境变量:

  • 如果安装了JDK,则为JAVA_HOME
  • 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

答案 6 :(得分:9)

我发现我的路径环境变量指向java 1.7,而JAVA_HOME指向1.8,所以我将路径变量编辑为1.8,我很好。

答案 7 :(得分:7)

在我的情况下,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。* one。

答案 8 :(得分:5)

安装了多个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,如果您使用的是更高版本版本,则会抛出此消息。

接下来是我较早的尝试,导致我得到了上面的答案,然后起作用了... 您可能需要根据安装的内容执行不同的操作,因此也许这些说明可能有所帮助:


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

答案 9 :(得分:3)

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

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

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

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

答案 10 :(得分:2)

我同意@Hozington。 这应该是检测Java版本的Cordova代码上的错误。 我所做的是:

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

错误消失了!

答案 11 :(得分:2)

MAC: 导航到:/ Library / Java / JavaVirtualMachines 确保只有jdk1.8.0_201.jdk 如果您有很多,则删除其他JDK

答案 12 :(得分:2)

有时更改路径,java-home不起作用。您需要添加

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

也进入环境变量路径。

答案 13 :(得分:2)

MadNeox发布的答案是正确的。我遇到了类似的问题 我安装了jdk 9以及1.8版本

我首先尝试保留jdk 9并删除1.8它会显示错误要求检查失败

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

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

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

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

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

虽然答案已经给出,但确实花了一些时间才弄明白我哪里出错了所以决定发布这个希望它可以节省别人的时间

答案 14 :(得分:2)

此错误消息使用户混淆,成功屏幕如下所示。cordova build success

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

我使用JAVA_HOME中的正确配置和"系统变量"中的路径修复此问题。 enter image description here

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

答案 15 :(得分:1)

伙计们要在 Windows 上找到合适的内容,您需要执行以下操作

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

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

      注意:环境变量很棘手。在打开另一个之前,它们应该由; 关闭。这就是为什么我们在添加值之前加一个值,然后在值之后加一个来关闭它。

      enter image description here

      1. 现在关闭终端并重新打开,然后运行上一个命令。

答案 16 :(得分:1)

如果您同时安装了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**

答案 17 :(得分:1)

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

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

那个检测到的版本:null对我来说是真正的问题!

当查看 check_reqs.js(如上面的帖子中提到的)时,您会注意到这就是魔法发生的地方:它包含一个函数“check_java”,在某些时候,它使用 “execa”< /strong> 检索已安装的 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”,我能够解决这个问题。

只是想分享这个见解。

答案 18 :(得分:1)

如果您有许多版本的JDK,则可以运行

print("what is x")
x = int(input('> '))
print("what is y")
y = int(input('> '))
if x > y
    print("x > y")
elif y > x:
    print("y > x")
else:
    print("whatever")

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

答案 19 :(得分:1)

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

就我而言,我在安装Java 8之后已经安装了Java 11

您可以通过运行以下命令进行测试:

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。*)

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
现在,指向Java 8的

%JAVA_HOME%\bin路径将优先于指向JDK 11的其他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)

已修复!

答案 20 :(得分:1)

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

答案 21 :(得分:1)

这是一个古老的问题,但是由于我只是遇到了同样的问题,但是错误有另一个来源,这里有一个简短的答案。

Windows(仅)和Webstorm IDE 2019.2中出现的问题

在版本2019.2中,Webstorm出现了一个问题,因为它在内部将openjdk用于%JAVA_HOME%变量,而不是(来自OS)针对性的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

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

希望它对某人有帮助!

答案 22 :(得分:0)

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

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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

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

答案 25 :(得分:0)

此答案的 Ubuntu / Debian Linux 版本是安装openjdk 8并通过update-alternatives

设置默认值

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

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

# update java runtime (optional)
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

答案 26 :(得分:0)

我刚刚使用_重命名了旧的JDK文件夹,以防万一我需要进一步使用它,并且它有效。

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

答案 27 :(得分:0)

我正在使用Windows,并且有两个jdk 1.8和14版本……

遇到相同的问题,经过调试后找到解决方案。

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

它解决了

答案 28 :(得分:0)

面对同样的问题,我意识到我并没有通过删除旧的JAVA_HOME目录(我安装了版本11)来更改PC中的所有Java。我还必须编辑path变量。至少然后我得到了有关gradle的错误并顺利解决了。

答案 29 :(得分:0)

即使我正确地设置了所有路径变量,我仍然会收到此消息。

大量研究之后,我发现我的IDE(webstorm 19.x)与Java 11捆绑在一起。 阅读以下内容:https://intellij-support.jetbrains.com/hc/en-us/articles/206544879-Selecting-the-JDK-version-the-IDE-will-run-under帮助我将IDE切换回Java 8,这为我解决了这个问题。

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

我遇到了与jdk1.8.0_201相同的问题。当我使JAVA_HOME = C:\ Program Files \ Java \ jdk1.8.0_201并添加“ C:\ Program Files \ Java \ jdk1.8.0_201 \”时,此问题得到解决。 bin中的 path 变量

答案 32 :(得分:0)

  1. 转到“控制面板主页”
  2. 高级系统设置
  3. 环境变量
  4. 选择JAVA_HOME
  5. 修改
  6. 1.8的变量值

答案 33 :(得分:0)

转到控制面板,卸载旧的JDK,然后从https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html重新安装

问题将被排序。

答案 34 :(得分:0)

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

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

答案 35 :(得分:0)

如果问题仍然存在,

检查:

  • JAVA_HOME是科尔多瓦的可用版本
  • jdk / bin上的“ path”变量点(与JAVA_HOME相同的jdk)

答案 36 :(得分:0)

我卸载了所有Java安装程序,然后重新安装了jdk-8u181-windows-x64。对我来说,避免出现此问题是可行的。

答案 37 :(得分:0)

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

Cordova: Installing the requirements

答案 38 :(得分:-1)

对于Ubuntu用户 我一直在观察答案,但是花了我很多时间来收集解决方案。供以后参考,请使用以下命令卸载默认的sudo install

sudo rm -r /usr/lib/jvm/jdk10.0.2

用您安装的我的版本10.0.2替换上面的jdk! 然后转到oracle站点并从here下载tar.gz。 然后使用以下代码在终端上将文件提取到home文件夹中

tar zxvf jdk-8u201-linux-x64.tar.gz

替换您的Jdk,但使用cordova所需的jdk1.8,就像上面的一样。 然后使用下面的代码设置环境变量

gedit ~/.bashrc

将弹出文本编辑器,然后添加此导出内容!重新启动计算机后,它将正常工作

export JAVA_HOME=/home/abrsh/jdk1.8.0_201

在上面的代码中,abrsh是我的用户名,jdk1.8.0_201是我之前使用tar zxvf提取的文件夹