天天看點

[idea]Error:java: invalid source release: 1.8

出現問題

回歸正題,出現這個問題的狀況是我的電腦本機裝的預設jdk版本是1.8.0_71,然後我平常開發用的jdk版本是免安裝的1.7,隻配置了環境變量,平常用eclipse開發沒有出現過這方面的問題,昨天idea也沒有出現這個問題,結果今天建立了一個項目,然後設定好了jdk版本,tomcat也設定為了1.7,敲好代碼之後已啟動,就爆了這個錯,如下:

Error:java: invalid source release: 1.8

解決問題

查了一些資料,有如下解決辦法:

1.Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler ,然後設定 project bytecode version為1.7,然後設定如圖:

這裡寫圖檔描述

試了,失敗。

2.Project Structure ->Modules -> Dependencies ,将Module SDK設定為1.7,如圖:

檢查了一下,我的設定本來就是1.7,失敗

3.最後找到一篇跟我問題差不多的,這個:

Error:java: javacTask: source release 8 requires target release 1.8

于是我去檢查了一下自己的language level,果然是1.8,将其改為7,運作成功!

課外延伸

那麼這個language level為何呢?之前在eclipse裡沒有見過這個概念,我去查了一下,解釋如下:

當我們使用 JDK 8 的時候,我們隻能向下相容 JDK 8 及其以下的特性,是以隻能選擇 8 及其以下的 language level。是以當我們項目使用的是 JDK 8,但是代碼卻沒有使用 JDK 8 的新特性,最多使用了 JDK 7 的特性的時候我們可以選擇 7 - Diamonds,ARM,multi-catch etc.。

對此我們總結 language level:限定項目編譯檢查時最低要求的 JDK 特性。

現在假設我們有一個項目代碼使用的 JDK 8 新特性:lambda 文法,但是 JDK 選擇的卻是 JDK 7,即使 language level 選擇了 8 - Lambdas,type annotation etc.,也是沒有多大意義的,一樣會編譯報錯。

是以,language level有點像我們工程最低支援版本。比如Language level 設定了5.0 隻是就不能出現使用6.0/7.0特性的代碼。

繼續閱讀