【问题标题】:Cordova : Requirements check failed for JDK 1.8 or greaterCordova:JDK 1.8 或更高版本的要求检查失败
【发布时间】:2016-11-16 09:23:27
【问题描述】:

我在 Windows 7 操作系统中使用 Cordova 6.4.0,但在尝试构建 android 版本时出现此错误:

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

【问题讨论】:

标签: cordova cordova-cli


【解决方案1】:

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

sudo update-alternatives --config javac

直接改JAVA_HOME env变量好像没有任何效果。

编辑:响应 cmets: 这可能与通过包管理器安装的新 Debian(显然是 Ubuntu)Java 不使用 JAVA_HOME 环境变量来确定 JRE 的位置。请参阅thisthis post 了解更多信息。

【讨论】:

  • 你成就了我的一天。在过去的几天里,我尝试了一切。 Tnx 很多。但为什么只有这个有效?为什么设置变量没有效果?
  • 在 Ubuntu 上也为我工作...我为 java 完成了它,但不是 javac!现在无需卸载 Java 9 :)
  • 这里有同样的评论。虽然JAVA_HOME指向了正确的1.8 JDK,但只更新系统默认满足Cordova。
  • 在做 sudo update-alternatives --config javac 链接组javac中只有一种选择(提供/usr/bin/javac):/usr/lib/jvm/java-11-openjdk- amd64/bin/javac 无需配置。我需要回到 java-8-openjdk 那里可以做吗?
  • 是的! @hughjdavey 根据check_reqs.js 的源代码,为Cordova 执行的真正命令是javac -version,所以在Linux 环境中我们有命令update-alternatives,但市长错误是将此命令集中在java 中。 :)
【解决方案2】:

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

【讨论】:

  • @Urbycoz 你只需要在Windows OS 中转到Add or Remove Programs/Program Features。接下来,删除任何以前的 Java 版本。我还安装了version 7,在uninstalling 之后,cordova run android 工作。祝你好运。
  • 但这意味着什么?如果安装了不同的 JDK,cordova 如何选择 JDK。你不可能只有一个 JDK(例如构建机器)?
  • 您仍然需要设置环境变量,以便 Cordova 可以找到您的 JDK 的路径 superuser.com/questions/949560/…
  • @MadNeox 卸载其他版本只是一种解决方法,而不是解决方案
  • 为我做了诀窍。转到 appwiz.cpl(来自 windows cmd)并删除了 java 7 和 java sdk 7。
【解决方案3】:

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

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

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

【讨论】:

  • 记得在再次尝试运行命令之前关闭终端/IDE。
  • 或者你可以运行 $ 。 ~/.bashrc 再次导出环境变量
  • 对我来说,这只是第一步。还要确保 PATH 变量(用户或系统)中未提及“其他”JDK 位置(请参阅 Gandhi 的回答)
【解决方案4】:

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

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

cd /Library/Java/JavaVirtualMachines

sudo rm -rf jdk-9.0.1.jdk

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

【解决方案5】:

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

我查看了实际检查您的 java 版本号的代码。查找以下内容:platforms/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 Follow this link

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 变量是系统变量。
  • 确保将它们添加到您的用户路径Add variables to Path

【讨论】:

【解决方案6】:

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

【讨论】:

    【解决方案7】:

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

    'path' 环境变量中删除旧版本的 JDK 路径对我有用。希望它也对某人有所帮助。

    【讨论】:

    • 如果您正在设置环境变量,您可能会发现这很有用superuser.com/questions/949560/…
    • 是的,我可以用这个运行构建命令,但仍然在运行命令 'ionic cordova run android' 中挣扎,显示错误 INSTALL FAILED UPDATE INCOMPATIBLE。
    • @supriyachauhan 你可以尝试重新安装完整的东西。否则,您可能需要提供详细的细节来缩小问题范围
    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

      在我的例子中 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.* 一个。

      【讨论】:

      • 检查您的 Path 变量指向的位置。我让 JAVA_HOME 指向 1.8,但在 Path 中它指向不同的版本。将两者对齐后工作正常!
      【解决方案10】:

      当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 条目,优先或覆盖指向 JDK 1.8.* 的 %JAVA_HOME%\bin PATH

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

      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)
      

      已修复!

      【讨论】:

      • 我建议按顺序发出警告:如果您(在这种情况下的其他人)安装了 java 11 并且您进行此更改以赋予 java 8 优先级(在路径中并作为 java_home),请注意,您可能会遇到一些 ELSE 现在会损坏的东西,这些东西本来希望以这种方式找到 Java 11。 :-) 我确实希望有人会记录如何将cordova更改为使用特定的命名java位置,而不是依赖系统默认值,仅针对这种情况(网络上的许多人多年来一直在打击这种情况)。如果我找到它,我希望为这个和相关的 SO 主题添加一个新的答案。
      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

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

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

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

        希望以后能对大家有所帮助!

        【讨论】:

          【解决方案13】:

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

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

          然后错误消失了!

          【讨论】:

            【解决方案14】:

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

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

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

            【讨论】:

              【解决方案15】:

              这个答案的 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
              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
              

              【讨论】:

                【解决方案16】:

                要想在 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 ... 的寻址。 cordova 正在使用 PATH 可能指向 java12/13
                【解决方案17】:

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

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

                到环境变量路径也是如此。

                【讨论】:

                  【解决方案18】:

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

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

                  我用正确的 JAVA_HOME 配置和“系统变量”中的路径解决了这个问题。

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

                  【讨论】:

                    【解决方案19】:

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

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

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

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

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

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

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

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

                    【讨论】:

                      【解决方案20】:

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

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

                      那个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”版本过时,它不包含用于输出的 "all" 属性。因此,检索到的 Java 版本始终是未定义的。 通过将 "execa": "^4.0.2" 添加到 package.json 中的依赖项并再次运行“npm i”,我能够解决此问题。

                      只是想分享这个见解。

                      【讨论】:

                        【解决方案21】:

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

                        【讨论】:

                          【解决方案22】:

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

                          【讨论】:

                            【解决方案23】:

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

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

                            【讨论】:

                              【解决方案24】:

                              我在使用 jdk1.8.0_201 时遇到了同样的问题。当我制作 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_201 并添加“C:\Program Files\Java\jdk1.8.0_201\ 路径变量中的 bin"

                              【讨论】:

                                【解决方案25】:

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

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

                                【讨论】:

                                  【解决方案26】:

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

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

                                  在 2019.2 版本中,Webstorm 有一个问题,因为它在内部使用开放 jdk 作为 %JAVA_HOME% 变量,而不是(来自操作系统)目标 java jdk。

                                  就我而言(是的,它很旧,它是一个旧的科尔多瓦项目......)

                                  在 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 的输出在两种情况下都是相同的。

                                  希望它对某人有所帮助!

                                  【讨论】:

                                    【解决方案27】:

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

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

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

                                    解决了

                                    【讨论】:

                                      【解决方案28】:
                                      1. 转到控制面板主页
                                      2. 高级系统设置
                                      3. 环境变量
                                      4. 选择 JAVA_HOME
                                      5. 编辑
                                      6. 1.8 的变量值

                                      【讨论】:

                                        【解决方案29】:

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

                                        【讨论】:

                                          【解决方案30】:

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

                                          Cordova: Installing the requirements

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2020-07-12
                                            • 1970-01-01
                                            • 2023-03-03
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2020-05-04
                                            • 2021-08-17
                                            相关资源
                                            最近更新 更多