Gradle: Không thể xác định phiên bản java từ '11 .0.2 '


133

Tôi đã chạy nhận xét sau:

./gradlew app:installDebug

chỉ được đáp ứng với nhật ký:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Phiên bản gradle của tôi là 5.1.1:

------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------

Build time:   2019-01-10 23:05:02 UTC
Revision:     3c9abb645fb83932c44e8610642393ad62116807

Kotlin DSL:   1.1.1
Kotlin:       1.3.11
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.2 (Oracle Corporation 11.0.2+9-LTS)
OS:           Mac OS X 10.13.6 x86_64

Tôi không chắc chắn về cách tiếp tục (Tôi đã thử nâng cấp / hạ cấp, nhưng không có gì hoạt động cho đến nay).

CẬP NHẬT: Khi tôi chạy ./gradlew --version, tôi nhận được những thứ sau:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.2'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

Của tôi gradle-wrapper.propertieschứa:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-rc-1-all.zip

5
theo báo cáo lỗi này , có thể trình bao bọc gradle của bạn cũ hơn không?
Roddy of the Frozen Peas,

phiên bản gradle của tôi là 5.1.1, tôi nghĩ nó sẽ ổn.
lesley2958

2
Bạn chạy lệnh ./gradlew khởi chạy phiên bản gradle được liên kết với dự án cụ thể này. Không có đảm bảo rằng phiên bản của dự án là giống như một bạn đã cài đặt (5.1.1)
tryman

1
Thông tin phiên bản đó là kết quả của gradle --versionhay ./gradlew --version? Các dự án dựa trên Gradle thường sử dụng một trình bao bọc để giúp các nhà phát triển khác nhau dễ dàng sử dụng cùng một phiên bản Gradle để xây dựng dự án; điều này cũng làm cho các bản dựng ổn định hơn.
Slaw

đó là phiên bản củagradle --version
lesley2958

Câu trả lời:


123

Có hai ứng dụng Gradle khác nhau trong hệ thống của bạn.

  1. các system-wide Gradle
    Ứng dụng này được gọi bởi gradle (arguments).

  2. các gradle-wrapper
    Các gradle-wrapper là cụ thể cho từng dự án và chỉ có thể được gọi bên trong thư mục của dự án, sử dụng lệnh ./gradlew (arguments).

Phiên bản gradle toàn hệ thống của bạn là 5.1.1 (như OP đã giải thích trong các nhận xét, chạy lệnh gradle --versiontrả về phiên bản 5.1.1).

Tuy nhiên, lỗi là kết quả của một cuộc gọi đến gradle-wrapper ( ./gradlew). Bạn có thể kiểm tra phiên bản trình bao bọc gradle của dự án của mình không? Để làm điều đó, hãy thực thi ./gradlew --versionbên trong thư mục dự án của bạn, trong thư mục chứa tệp gradlew và gradlew.bat.

Cập nhật 1:
Do chạy ./gradlew --versionkhông thành công, bạn có thể kiểm tra phiên bản trình bao bọc của mình theo cách thủ công bằng cách mở tệp:

(thư mục gốc của dự án) /gradle/wrapper/gradle-wrapper.properties

với một trình soạn thảo văn bản đơn giản. "Phân phối" bên trong sẽ cho chúng ta biết phiên bản của trình bao bọc là gì.

Cập nhật 2: Theo câu hỏi cập nhật của OP, phiên bản của gradle-wrapper là 4.1RC1.
Gradle đã thêm hỗ trợ cho JDK 11 trong Gradle 5.0 . Do đó, vì 4.1RC không hỗ trợ JDK 11 nên đây chắc chắn là một vấn đề.

Cách rõ ràng là cập nhật gradle-wrapper của dự án lên phiên bản 5.0. Tuy nhiên, trước khi cập nhật, hãy thử chạy gradle app:installDebug. Điều này sẽ sử dụng Gradle được cài đặt trên toàn hệ thống của bạn có phiên bản là 5.1.1 và hỗ trợ Java 11. Hãy xem điều này có hoạt động không. Nếu đúng như vậy thì bản dựng của bạn (tệp build.gradle) không bị ảnh hưởng bởi bất kỳ thay đổi vi phạm nào giữa v.4.1RC1 và v.5.1.1 và sau đó bạn có thể cập nhật trình bao bọc của mình bằng cách thực thi từ dòng lệnh bên trong thư mục dự án của bạn: gradle wrapper --gradle-version=5.1.1[ *].

Nếu gradle app:installDebugkhông thực thi chính xác, thì có thể bạn cần nâng cấp bản dựng Gradle của mình. Để cập nhật từ v.4.1RC1 lên 5.1.1, dự án Gradle cung cấp hướng dẫn ( 1 , 2 ) với các thay đổi đột phá và các tính năng không dùng nữa giữa các bản phát hành nhỏ, để bạn có thể cập nhật dần dần lên phiên bản mới nhất.

Ngoài ra, nếu vì lý do nào đó bạn không thể hoặc không muốn nâng cấp bản dựng Gradle của mình, bạn luôn có thể chọn hạ cấp phiên bản Java của mình xuống phiên bản mà Gradle 4.1RC1 hỗ trợ.

[*] Như đã chỉ ra một cách chính xác trong một câu trả lời khác của @lupchiazoem, hãy sử dụng gradle wrapper --gradle-version=5.1.1(chứ không phải ./gradlewnhư tôi đã đăng ban đầu do nhầm lẫn). Lý do là Gradle chạy trên Java. Bạn có thể cập nhật gradle-wrapper của mình bằng cách sử dụng bất kỳ bản phân phối Gradle nào đang hoạt động, Gradle được cài đặt trên toàn hệ thống của bạn hoặc chính gradle-wrapper. Tuy nhiên, trong trường hợp này, trình bao bọc của bạn không tương thích với phiên bản Java đã cài đặt của bạn, vì vậy bạn phải sử dụng Gradle trên toàn hệ thống (hay còn gọi là gradlekhông ./gradlew).


1
@tryman cảm ơn! đối với tôi đó là bản cập nhật 2 của bạn đã giúp tôi. Theo nguyên tắc chung, tôi nghĩ tôi sẽ kiểm tra phiên bản gradle sắp tới.
Avid Programmer

bạn không nói chính xác NGUYÊN NHÂN gây ra lỗi là gì. Các phiên bản khác nhau?
João Pimentel Ferreira

Gì? Tôi nghĩ Cập nhật 2 khá rõ ràng. Cô ấy đang cố gắng chạy trình bao bọc Gradle của phiên bản 4.1RC1 với JDK11. Gradle đã thêm hỗ trợ cho JDK11 ở phiên bản 5.0. Vậy sự nhầm lẫn của bạn @ JoãoPimentelFerreira là gì? Đó là nguyên nhân, phần còn lại là giải pháp về cách cập nhật trình bao bọc của dự án lên phiên bản mới hơn hỗ trợ JDK11.
tryman

1
Bây giờ đến lượt tôi bối rối. Nếu bạn thực sự có cả trình bao bọc gradle trong thư mục dự án của mình và cài đặt Gradle trên toàn hệ thống, giải pháp từng bước ở trên sẽ phù hợp với bạn. Bạn đã thử nâng cấp trình bao bọc của mình bằng cách thực hiện lệnh cập nhật bên trong thư mục dự án của mình gradle wrapper --gradle-version=5.0chưa? Thay 5.0 với phiên bản mong muốn của bạn, tôi nghĩ bây giờ mới nhất là 5.4
tryman

1
Tuy nhiên, một lời cảnh báo: Giữa phiên bản 3.3 của trình bao bọc của bạn với bất kỳ phiên bản 5.x nào, nhất định sẽ có một số thay đổi vi phạm mà bạn có thể gặp phải hoặc có thể không gặp phải. Đó là lý do tại sao trong câu trả lời của tôi, tôi khuyên bạn trước tiên nên xây dựng dự án của mình bằng Gradle trên toàn hệ thống để xác minh rằng mọi thứ chạy trơn tru với phiên bản 5.x mà bạn muốn nâng cấp trước khi cập nhật trình bao bọc của dự án. Nếu vội vàng (tôi cảm thấy sự cấp bách trong giọng điệu của bạn), bạn luôn có thể sử dụng hệ thống phân cấp trực tiếp hoặc hạ cấp xuống JDK cũ hơn và bắt đầu nâng cấp trình bao bọc của bạn sau.
tryman

34

Như distributionUrlvẫn đang trỏ đến phiên bản cũ hơn, hãy nâng cấp trình bao bọc bằng cách sử dụng:

gradle wrapper --gradle-version 5.1.1

Lưu ý: Sử dụng gradlevà khônggradlew


Điều đó hoạt động. Lệnh cập nhật phiên bản trình bao bọc gradle của tôi. Cảm ơn.
Daniel

Hoặc chỉ cần thay thế phiên bản trong gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip Phiên bản 6 bằng JDK12 dường như không hoạt động. 5.1.1 hoạt động tốt, cảm ơn bạn.
Liam Kernighan

11

Trong trường hợp của tôi, JAVA_HOMEbiến được đặt thành /usr/lib/jvm/jdk-11.0.2/. Chỉ cần bỏ đặt biến như thế này là đủ:

$ export JAVA_HOME=


1
Điều này cũng giải quyết được vấn đề của tôi. jenv có thể đã bắt đầu các vấn đề của tôi ban đầu.
jokarl

đối với tôi GRADLE_HOMEđã được cập nhật (lên 5.4.1 '') nhưng không phải phiên bản gradle (vẫn trỏ đến phiên bản cũ hơn 4.3), điều này thật kỳ lạ nhưng khởi động lại thiết bị đầu cuối hoạt động tốt. một cái gì đó kỳ lạ vớisource ~/.bash_profile
prayagupd

7

Cập nhật gradle/wrapper/gradle-wrapper.propertiesvới phiên bản sau đã khắc phục sự cố cho tôi:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

6

tl; dr : hạ cấp java bằng cách chạyupdate-alternatives


Phiên bản gradle hệ thống của tôi là 4.4.1 và phiên bản gradle wrapper là 4.0. Sau khi chạy lệnh được đưa ra bởi một số câu trả lời khác:

gradle wrapper --gradle-version 4.4.1

Tôi vẫn gặp lỗi tương tự:

FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.4'.

Hóa ra java 11 không được hỗ trợ cho đến phiên bản gradle 4.8 và kho phần mềm của tôi chỉ có 4.4.1. (Ngoài ra, việc nâng cấp lên phiên bản gradle mới hơn có thể không tương thích với gói mà tôi đang cố gắng biên dịch.)

Câu trả lời là hạ cấp java. Hệ thống của tôi thực sự đã được cài đặt java8 và có thể dễ dàng chuyển đổi giữa các phiên bản java bằng cách chạy lệnh này và làm theo hướng dẫn:

sudo update-alternatives --config java

5

Vì phiên bản wrapper không hỗ trợ 11+ nên bạn có thể thực hiện thủ thuật đơn giản để gian lận phiên bản mới hơn của InteliJ mãi mãi.

  press3x Shift -> type "Switch Boot JDK" -> and change for java 8. 

https://blog.jetbrains.com/idea/2015/05/intellij-idea-14-1-4-eap-141-1192-is-available/

Hoặc Nếu bạn muốn làm việc với java 11+, bạn chỉ cần cập nhật phiên bản wrapper lên 4.8+


1
Lưu ý KHÔNG thử giải pháp này trên Android Studio. Tôi sẽ phá vỡ nó.
Mauricio Sartori

3

Để rút gọn câu trả lời dài, hãy nâng cấp gradlewbằng cách sử dụng gradlecông cụ hệ thống . Lưu ý rằng nâng cấp bên dưới hoạt động ngay cả khi gradlephiên bản hệ thống của bạn là < 5.

gradle wrapper --gradle-version=5.1.1

3

Tôi đã có cùng một vấn đề ở đây. Trong trường hợp của tôi, tôi cần sử dụng phiên bản cũ của JDK và tôi đang sử dụng sdkmanager để quản lý các phiên bản của JDK, vì vậy, tôi đã thay đổi phiên bản của máy ảo thành 1.8.

sdk use java 8.0.222.j9-adpt

Sau đó, ứng dụng sẽ chạy như mong đợi tại đây.




1

Tôi đã giải quyết vấn đề này bằng cách nhấp vào Tệp -> Cấu trúc dự án sau đó thay đổi Vị trí JDK thành Sử dụng JDK nhúng (Được khuyến nghị)


0

Tôi đã gặp phải một vấn đề tương tự. Tôi đã xóa những thứ này:

  • thư viện và bộ nhớ đệm từ thư mục .idea (YourApp> .idea> ..) VÀ
  • nội dung của thư mục xây dựng.

    sau đó xây dựng lại.

* ĐỪNG QUÊN DỰ PHÒNG DỰ ÁN CỦA BẠN TRƯỚC *


0

Tôi đã gặp vấn đề tương tự trong Ubuntu 18.04.3 LTS. Trong trường hợp của tôi, apt đã cài đặt phiên bản gradle 4.4.1. Phiên bản java đã được cài đặt là 11.0.4

Thông báo xây dựng mà tôi nhận được là

Could not determine java version from '11.0.4'.

Vào thời điểm đó, hầu hết các tài liệu trực tuyến đều tham chiếu phiên bản gradle 5.6, vì vậy tôi đã làm như sau:

sudo add-apt-repository ppa:cwchien/gradle
sudo apt update
sudo apt upgrade gradle

Sau đó, tôi lặp lại bắt đầu dự án (sử dụng "gradle init" với các giá trị mặc định). Sau đó, "./gradlew build" đã hoạt động bình thường.

Sau đó, tôi đã đọc một nhận xét liên quan đến sự thay đổi định dạng của đầu ra từ "java --version" khiến gradle bị hỏng, điều này đã được sửa trong phiên bản sau của gradle.


0

Trong trường hợp của tôi, tôi đang cố gắng tạo và tải APK cho một dự án Unity 3D cũ (để tôi có thể chơi trò chơi trên điện thoại Android của mình). Tôi đang sử dụng phiên bản Android Studio mới nhất và tất cả các gói SDK tôi có thể tải xuống thông qua Trình quản lý SDK trong Android Studio. Gói SDK được đặt tại

C:/Users/Onat/AppData/Local/Android/Sdk 

Và thông báo lỗi mà tôi nhận được giống nhau ngoại trừ phiên bản JDK (Java Development Kit) "jdk-12.0.2". JDK được đặt tại

C:\Program Files\Java\jdk-12.0.2

Và Biến môi trường trong Windows là JAVA_HOME: C: \ Program Files \ Java \ jdk-12.0.2

Sau 3 giờ nghiên cứu, tôi phát hiện ra rằng Unity không hỗ trợ JDK 10. Như đã nói trong https://forum.unity.com/threads/gradle-build-failed-error-could-not-determine-java-version-from-10-0-1.532169/. Đề xuất của tôi là:

  1. Gỡ cài đặt JDK không mong muốn nếu bạn đã cài đặt một JDK. https://www.java.com/tr/download/help/uninstall_java.xml
  2. Hướng tới http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  3. Đăng nhập / Mở tài khoản Oracle nếu chưa đăng nhập.
  4. Tải xuống JDK 8 cũ hơn nhưng có chức năng để thiết lập máy tính của bạn (32 bit / 64 bit, Windows / Linux, v.v.)
  5. Cài đặt JDK. Ghi nhớ đường dẫn cài đặt. ( https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ )
  6. Nếu bạn đang sử dụng Windows, hãy mở Biến môi trường và thay đổi Đường dẫn Java thông qua Nhấp chuột phải vào My Computer/This PC>Properties>Advanced System Settings>Environment Variables>New>Variable Name: JAVA_HOME>Variable Value: [YOUR JDK Path, Mine was "C:\Program Files\Java\jdk1.8.0_221"]
  7. Trong Unity 3D, nhấn Edit > Preferences > External Tools and fill in the JDK path (Mine was "C:\Program Files\Java\jdk1.8.0_221").
  8. Ngoài ra, trong cùng một cửa sổ bật lên, hãy chỉnh sửa Đường dẫn SDK. (Lấy nó từ Android Studio > SDK Manager > Android SDK > Android SDK Location.)
  9. Nếu cần, hãy khởi động lại máy tính của bạn để các thay đổi có hiệu lực.

0

phải đến tệp dự án .. gradle / wrapper / gradlewrapper.properties

ở đó, bạn có thể thay đổi giá trị của distributionurlphiên bản mới nhất. (Tìm thấy trên docs.gradle.org)


0

Tôi đã gặp phải vấn đề tương tự trong thiết lập Docker, trong khi tôi đang cố gắng cài đặt Gradle-2.4với JDL 11.0.7. Tôi phải cài đặt phiên bản mới hơn để khắc phục sự cố.

Đây là Dockerfile đang làm việc

FROM openjdk:11.0.7-jdk
RUN apt-get update && apt-get install -y unzip
WORKDIR /gradle
RUN curl -L https://services.gradle.org/distributions/gradle-6.5.1-bin.zip -o gradle-6.5.1-bin.zip
RUN unzip gradle-6.5.1-bin.zip
ENV GRADLE_HOME=/gradle/gradle-6.5.1
ENV PATH=$PATH:$GRADLE_HOME/bin
RUN gradle --version
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.