Java 11要求检查失败,需要使用JDK 1.8或更高版本与Cordova。

9
当我在项目路径下运行“cordova run android”时,会得到以下结果。
Android Studio project detected
cordova-android-support-gradle-release: Android platform: V7+
cordova-android-support-gradle-release: Wrote custom version '27.+' to /path/to/platforms/android/app/build.gradle
cordova-android-support-gradle-release: Wrote custom version '27.+' to /path/to/cordova-android-support-gradle-release/norsan-cordova-android-support-gradle-release.gradle
ANDROID_HOME=/usr/lib/android-sdk
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Requirements check failed for JDK 1.8 or greater

我的Java版本

$ java --version
openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment (build 11.0.5+10-post-Ubuntu-0ubuntu1.119.04)
OpenJDK 64-Bit Server VM (build 11.0.5+10-post-Ubuntu-0ubuntu1.119.04, mixed mode, sharing)

我的 javac 版本

$ javac --version
javac 11.0.5

我的Cordova版本

$ cordova --version
9.0.0 (cordova-lib@9.0.1)

我的 Node 版本

$ node --version
v10.15.2

我的Nodejs版本

$ nodejs --version
v10.15.2

我的NPM版本

$ npm --version
5.8.0

我的 Gradle 版本

$ gradle -version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/usr/share/java/groovy-all.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

------------------------------------------------------------
Gradle 4.4.1
------------------------------------------------------------

Build time:   2012-12-21 00:00:00 UTC
Revision:     none

Groovy:       2.4.16
Ant:          Apache Ant(TM) version 1.10.5 compiled on March 28 2019
JVM:          11.0.5 (Private Build 11.0.5+10-post-Ubuntu-0ubuntu1.119.04)
OS:           Linux 5.0.0-38-generic amd64

我发现使用命令android-studio --version没有任何响应,但是当我通过图形用户界面打开程序时,我看到版本号是3.6.1。

我的Android SDK版本是未知的...不确定原因。

$ androidsdk --version
SDK_ROOT=/home/galen/snap/androidsdk/21/AndroidSDK
Picked up _JAVA_OPTIONS: -Duser.home=/home/galen/snap/androidsdk/21
Unknown version

我的Ubuntu版本

$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=19.04
DISTRIB_CODENAME=disco
DISTRIB_DESCRIPTION="Ubuntu 19.04"
NAME="Ubuntu"
VERSION="19.04 (Disco Dingo)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.04"
VERSION_ID="19.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=disco
UBUNTU_CODENAME=disco

我理解的是Java 11比JDK 1.8版本要更新,为什么需求检查失败了呢?如何修复这个需求检查失败的问题呢?


Java 9是Java的一个重大版本,引入了一个新的模块系统,并删除了一些已弃用的类、方法和功能。请使用Java 8。 - Elliott Frisch
2个回答

7

更新:

Java 11 支持cordova 10+,这允许与 cordova 9 相同的最小 Android 版本。这应该是现在首选的解决方案。


原始答案(供参考):

你是正确的,Java 11 比 JDK 1.8 更为新,理论上说它应该可以使用。

然而,cordova 仍然明确要求使用 JDK 1.8

Android 不使用 Oracle 的 Java,而是使用他们自己的实现,目前像 Java 8 一样。因此,这是一个 Android 的限制,不是 cordova 可以修复的问题。

(另请参见问题 510)

他们的开发指南也明确提到了 JDK 1.8

JDK(Java Development Kit)

安装 Java 开发工具包 (JDK) 8。

因此现在的解决方案是安装 JDK 1.8(如果选择 Oracle,请注意他们最近更改的许可条款)。然而,你可以关注PR 928,它试图放宽这个限制。


我仍然在尝试使用cordova run android时遇到错误,但这些错误与另一个问题有关。我接受了你的答案,认为它解决了我遇到的依赖性问题。请注意,我使用G Alternative来管理多个Java JRE/JDK版本。 - Galen
当我回归到JDK 1.8时,以上的“requirement”错误消失了,但是我却得到了另一个错误:“Android Gradle插件需要Java 11才能运行。您当前正在使用Java 1.8。”--所以请问如何解决这个冲突? - Free Bud
他们(链接的)开发指南提到:“如果使用cordova-android 10+版本,则可以安装Java开发工具包(JDK)11。”(这是他们当前的版本)。 - Marvin

2

这里的问题在于命令不遵守JAVA_HOME变量(您需要将其设置为Java 8)。

正如其他人已经提到的,从8到11的升级是巨大的。许多在Java 8中的库在Java 11中被移出,因此虽然Java本身是向后兼容的,但包含的库却不是。

我的解决方法是将JAVA_HOME设置为JDK8。

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

并且我需要使用命令配置系统范围内的Java和Javac设置。

sudo update-alternatives --config java
sudo update-alternatives --config javac

1
我们可以在Android Studio项目中使用openjdk 11吗? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接