idea的language level含义和module的language level自动跳到5
一、idea中項目的language level的含義
language level指的是編譯項目代碼所用的jdk版本。
那么,從這個定義出發會有兩個小問題。
第一,如果project sdk是jdk8,那么language level應該是多少呢?可以選擇的值是8、7、6、。。。1,取哪個值表示編譯代碼的時候使用哪個版本的java編譯器,雖然project sdk是8,但是sdk8是可以編譯出jdk7兼容的字節碼的。就是說高版本的sdk可以編譯出低版本的jvm的字節碼。
第二、這里的language level可千萬不能設置的高于8,比如設置11、17等,那都是不行的,因為sdk的版本限制了它的最高編譯版本。
二、module的language level自動跳動5
原因:
這個問題是由于maven-compiler-plugin這個maven插件導致的。
該插件從3.0版本開始,默認編譯器是javax.tools.JavaCompiler (前提是JDK 1.6以后);如果想使用javac,需要手動設置。
當前的maven版本(Version: 3.5.1),默認使用JDK 1.5解析和編譯源碼,與運行Maven的JDK版本無關!!!如果想修改,見鏈接(setting the -source and -target of the Java Compiler。
(
javac和javax.tools.JavaCompiler的區別是什么呢?
javac (作為java編譯器)是一個可執行文件,理論上甚至可以是依賴于平臺的可執行文件或腳本。這被稱為將 .java 編譯為 .class 。
在Windows上它的名字是 javac.exe ,它通常在 C以下的地方:\程序文件* \ jdk * \ \ _ \ n 。
此編譯器也是用java開發的。這意味著,如果我們啟動此.exe,則需要啟動一個新的Java虛擬機來運行它。這很慢。
但是,因為它是用Java編寫的,所以有一個更快的替代方案:從我們已經運行的jvm,我們只需 import 它的主類(fe javax.tools.JavaCompiler 等)并調用它。這不需要啟動不需要的jvm。這就是maven的作用。僅僅10年就足以讓他們正確地做到這一點。 : - )
當然它也有一些后退。最可能的原因是,在內部編譯器的情況下,它需要從與maven核心相同的jvm和相同的命名空間中運行。同樣指定備用jvm是不可能的,并且可能還存在一些由命名空間沖突導致的副作用。但它們非常不可能,因為它們都是精心設計的軟件。
)
查看全文
解決辦法:
1、項目的pom文件中增加以下plugin
2、項目pom中增加以下properties
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties>上面的兩個辦法,在每個項目中都要手動設置一下,比較麻煩。下面的第三個辦法是一個一勞永逸的辦法。
3、一勞永逸的辦法
File->setting->Editor->File and Code Templates->Other->Maven-> Maven Project.xml
在${END}下面(這個自己的情況而定)添加java編譯器版本等內容,然后點擊Apply,點擊OK,結束。
這里添加后,再新建項目后,項目的pom文件中自動加上了:
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties>其實根本上和上面兩種是一樣的,只不過這第三種方法會自動加上properties,前面兩種方法要研發人員每次新建一個項目后手動添加,不過研發不易,能省點力氣就省點力氣吧,畢竟研發不是人生的唯一事項,我們還要省出精力生活呢,是吧?
總結
以上是生活随笔為你收集整理的idea的language level含义和module的language level自动跳到5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机音乐谱消愁,消愁简谱-毛不易-歌词
- 下一篇: 数字电路学习——三极管的使用