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


92

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

问题说明

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


3
好。我遇到了同样的问题,但是我无法下载1.8版本,因为它以其他名称隐藏。其8u152。几个小时后,我发现在这里:oracle.com/technetwork/java/javase/downloads/...
user2367101

Answers:


58

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


3
@Urbycoz你只需要去Add or Remove Programs/Program FeaturesWindows OS。接下来,删除所有以前的Java版本。我version 7也安装了一个uninstalling,然后cordova run android工作了。祝好运。
Aakash

1
但是这是什么意思?如果安装了不同的JDK,cordova如何选择JDK。您不可能只有一个JDK(例如,构建计算机)吗?
Bruno Ranschaert '16

你仍然需要设置envionment变量,以便科尔多瓦能找到的路径为JDK superuser.com/questions/949560/...
伊冯Aburrow

19
@MadNeox卸载其他版本只是解决方法,而不是解决方案
Gandhi

为我做了把戏。(从Windows cmd)转到appwiz.cpl,并删除了Java 7和Java SDK7。–
Ortiz

52

在Linux(Debian / Ubuntu)中,可以通过选择Java 1.8 SDK来解决此问题。

sudo update-alternatives --config javac

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

编辑:回应评论:这可能与以下事实有关:通过软件包管理器进行的新Debian(显然是Ubuntu)Java安装未使用JAVA_HOME环境变量来确定JRE的位置。有关更多信息,请参见此此帖子


1
你让我今天一整天都感觉很好。过去几天,我尝试了所有方法。Tnx很多。但是,为什么只有这样才能起作用?为什么设置变量无效?
my-

1
在Ubuntu上也为我工作过...我做了,java但是还没有javac!现在无需卸载Java 9了:)
hughjdavey

同样的话。尽管JAVA_HOME指向正确的1.8 JDK,但只有更新系统默认值才能使Cordova满意。
myoan '18

1
在执行sudo update-alternatives --config javac时,链接组javac(提供/ usr / bin / javac)只有一种选择:/ usr / lib / jvm / java-11-openjdk-amd64 / bin / javac 。我需要回到java-8-openjdk那里吗?
泰布

为什么这是Ubuntu中的解决方案。就像myoan所说的那样,为什么更新系统默认满意的cordova?
Jithin '18年

39

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

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

enter image description here

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


9
在再次尝试运行命令之前,请记住关闭终端/ IDE。
丹尼尔(Daniel)

1
或者你可以只运行$。〜/ .bashrc再次导出环境变量
Nick Cuevas,


23

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

我看了一下实际上检查您的Java版本号的代码。在platform / android / cordova / lib / check_reqs.js中查找以下内容: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版本单击此链接

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

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

不工作?

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


这是我唯一的正确答案。有关更多信息,请参见此
Dara Java

17

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

'path环境变量中删除旧版本的JDK路径对我来说很成功。希望它也能帮助别人。


如果要设置环境变量,你可能会发现这个有用 superuser.com/questions/949560/...
伊冯Aburrow

是的,我能够使用此命令运行build命令,但仍在运行命令“ ionic cordova run android”中苦苦挣扎,显示错误安装失败更新不兼容。
supriya chauhan

@supriyachauhan,您可以尝试重新安装完整的内容。否则,您可能必须提供详细的信息以缩小问题的范围
甘地


8

在我的情况下,JAVA_HOME指向C:\ Program Files(x86)\ Java \ jdk1.7.0_55

当我java.cmd中的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。*一个。


检查您的Path变量指向的位置。我有JAVA_HOME指向1.8,但是在Path中它指向了另一个版本。我将两者对齐后效果很好!
ahb

6

MAC:导航至:/ Library / Java / JavaVirtualMachines确保只有jdk1.8.0_201.jdk(如果有很多),然后删除其他JDK


5

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

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

错误消失了!


4

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

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

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


3

伙计们要在Windows上正确混合,您需要执行以下操作

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

在此处输入图片说明

  1. 在您的系统路径变量中,输入分号,;然后将此值添加到系统路径,例如,C:\Program Files\Java\jdk1.8.0_162\bin;此处\bin添加。

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

在此处输入图片说明

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

从JAVA_HOME,PATH混合了java ...的寻址。科尔多瓦正在使用PATH,它可能指向java12 / 13
bortunac

3

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

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

以及环境变量路径。


3

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

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

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

希望以后能对某人有所帮助!


3

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

告诉我我已经安装了什么版本的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的命令对我有用。


2

此错误消息使用户感到困惑,成功屏幕如下。科尔多瓦取得成功

该错误消息使用户尝试使用JAVA_HOME配置修复构建失败。但是真正的问题不只是在JAVA_HOME中。

我使用JAVA_HOME中的正确配置和“系统变量”中的路径来解决此问题。 在此处输入图片说明

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


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的位置)

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

尽管已经给出了答案,但确实花了我一些时间才能弄清楚我要去哪里错了,所以决定发布此希望,这样可以节省别人的时间


1

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


1

如果同时安装了jdk8和jdk9,则必须检查wich版本是

在路径以及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**

1

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

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

1

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


1

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

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

1

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

在Windows(仅限)和Webstorm IDE 2019.2上出现问题

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

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

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

$ java -version
java version "1.8.0_221"

java -version在Webstorms终端中执行:

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

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

希望它能对某人有所帮助!


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

环境变量

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

在此处输入图片说明

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

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

在此处输入图片说明

  1. 单击“下移”以查看覆盖的条目,直到它们位于下方 %JAVA_HOME%\bin

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

在此处输入图片说明

  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)

固定!


0
  1. 转到控制面板主页
  2. 高级系统设置
  3. 环境变量
  4. 选择JAVA_HOME
  5. 编辑
  6. 可变值为1.8

0

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



0

我只是使用重新命名了较旧的JDK文件夹_,以防万一我进一步需要它,并且它可以工作。

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

在我的机器上,java和javac的配置不一致:java指向JDK 9,而javac指向JDK8。将两者都设置为JDK 8可以解决此问题。
ominug

0

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

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

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

它解决了


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.