簡體   English   中英

IntelliJ - 無效的源版本:17

[英]IntelliJ - Invalid source release: 17

我在 IntelliJ 中使用 Gradle 創建了一個新的 Java 項目,該項目使用 Java 17。運行我的應用程序時出現錯誤Cause: error: invalid source release: 17

我的設置

我已經通過IntelliJ安裝了openjdk-17並將其設置為我的Project SDK

Project language level已設置為17 - Sealed types, always-strict floating-point semantics

在此處輸入圖像描述

Modules -> Sources中,我將Language level設置為Project default (17 - Sealed types, always strict floating-point semantics)

模塊->源

Modules -> Dependencies中,我將Module SDK設置為Project SDK openjdk-17

模塊->依賴項

Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler我已將Project bytecode version設置為17

在此處輸入圖像描述

Gradle

plugins {
    id 'org.springframework.boot' version '2.5.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.13.0'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'
}

test {
    useJUnitPlatform()
}

我已經在這里查看了所有答案,但我似乎無法解決這個問題。 我一定錯過了什么,但我找不到。 我使用 Java 8 或 11 沒有任何問題。

我該如何解決這個問題?

在 intellij 中,只需將 Gradle JVM 設置為 Java 版本 17。

“文件->設置..->構建,執行,部署->構建工具-> Gradle”選擇您的項目並將Gradle JVM設置為您的java 17.0.1

將 Gradle JVM 設置為目標構建 jvm

文件 -> 設置.. -> 在此處輸入圖像描述

該消息通常表明您的JAVA_HOME環境變量指向不同的Java版本。

以下是要遵循的步驟:

  • 關閉IntelliJ IDEA
  • 打開一個終端窗口並檢查您的JAVA_HOME變量值:
    • *nix 系統: echo $JAVA_HOME
    • Windows 系統: echo %JAVA_HOME%
  • JAVA_HOME路徑應該指向不同的路徑,然后將其設置為openjdk-17路徑:
    • *nix 系統: export JAVA_HOME=/path/to/openjdk-17
    • Windows系統: set JAVA_HOME=path\to\openjdk-17
  • IntelliJ IDEA中再次打開您的項目
  • 確保設置目標兼容性版本(不僅是sourceCompatibility

您應該能夠構建您的項目。

編輯:搖籃工具鏈

您可能還需要通過將Java插件工具鏈設置為您的目標版本來指示Gradle使用與其自身使用的不同的JVM

// build.gradle
java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

一張圖片勝過千言萬語!

輸入首選項並更改 Gradle JVM。

在此處輸入圖像描述

將 JAVA_HOME 設置為 JDK 17 並通過打開 cmd -> javac 進行檢查。 這應該返回您機器中設置的當前 java 版本

intellij 引發此錯誤的原因可能有很多

  • 檢查你的 JAVA_HOME ->
echo $JAVA_HOME

如果 JAVA_HOME 不正確,請更新 JAVA_HOME 環境變量。

  • 檢查 IntelliJ 中的項目結構是否正確。
File > Project Structure > Project Setting > Project -> SDK and Language level should match

File > Project Structure > Project Setting > Modules -> Language Level should match with SDK
  • 檢查並修復首選項中的設置是否正確
Preferences > Build, Execution and Deployment > Gradle > Gradle JVM should match with SDK (Preferences > Build, Execution and Deployment > maven if you're using maven)

Preferences > Build, Execution and Deployment > Compiler > Java Compiler > Project Bytecode version (this should match with your SDK as well)

如果您從直接從 Intelij 調用的 main 方法啟動項目,則缺少對話框執行配置可能是導致錯誤的原因。

始終檢查執行配置以確保插入了正確的 JRE 文件夾。在最新版本的 jdk 中,沒有特定的 jre 文件夾,而是完整的 jdk 包,因此請確保它指向此文件夾。

在此處輸入圖像描述

在此處輸入圖像描述

您可以在~/.gradle/gradle.properties中定義org.gradle.java.home ,例如:

org.gradle.java.home=/path/to/jdk17

這將涵蓋gradle cli 和 IntelliJ 的默認值(如果未另行指定)

(Windows 用戶文件位於C:\Users\<username>\.gradle\gradle.properties

我遇到了這個問題,只有在從終端構建時,而從 IntelliJ 運行配置的執行工作

原因可能是,我已經從相對較新的方式直接從 IDE 下載了 JDK

在此處輸入圖像描述

我的猜測是,這個 JDK 的路徑設置在這里

在此處輸入圖像描述

只有 IntelliJ 知道,並且可能在運行運行配置時動態傳遞給 Gradle ,而Gradle 本身不知道

我試圖弄清楚發生了什么,所以我添加了這個任務,它在兩種情況下都會打印到舊本地 JDK 的相同路徑。

tasks.build.doFirst {
    println "used jdk path: " + System.getenv('JAVA_HOME')
}

C:\Program Files\GraalVM\graalvm-ce-java11-21.1.0

之后我刪除了該路徑下的舊 JDK 並重試了運行配置和終端執行。 現在運行配置仍然有效,同時打印相同的無效 JDK 路徑,並且終端執行失敗並顯示

錯誤:JAVA_HOME 設置為無效目錄:C:\Program Files\GraalVM\graalvm-ce-java11-21.1.0

請在您的環境中設置 JAVA_HOME 變量以匹配您的 Java 安裝位置。

在這兩種情況下我都預料到了錯誤,但似乎不一定使用JAVA_HOME 目錄,並且除了使用 env 變量之外,IntelliJ 必須告訴 Gradle 使用.jdks 目錄中的正確 JDK。

這只是一個假設,如果有人有解釋我會很感激,尤其是 Gradle 如何知道要使用什么 JDK。

在 build.gradle 中設置 sourceCompatibility = '11' 不是 sourceCompatibility = '17'

安裝java17。

然后

文件 -> 項目結構 -> 將 sdk 設置為 java17

暫無
暫無

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

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