簡體   English   中英

使用 Cordova 的 JDK 1.8 或更高版本的 Java 11 要求檢查失敗

[英]Java 11 requirements check failed for JDK 1.8 or greater with Cordova

當我在我的項目路徑中運行````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 --version
9.0.0 (cordova-lib@9.0.1)

我的節點版本

$ 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。

我的 androidsdk 版本未知...不知道為什么。

$ 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 11 比 JDK 1.8 更新,理論上它應該可以工作。

但是, cordova仍然明確要求 JDK 1.8

Android 不使用 oracles java 而是他們自己的實現,目前就像 java 8。所以這是一個 android 限制,不是cordova 可以修復的。

(參見第 510 期

他們的開發指南也明確提到了 JDK 1.8

Java 開發工具包 (JDK)

安裝 Java 開發工具包 (JDK) 8.

所以現在的修復是安裝 JDK 1.8(如果你選擇 Oracle,請注意他們最近更改的許可條款)。 不過,您可以觀看試圖放寬該限制的PR 928

這里的問題是該命令不尊重 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM