記一次Intellij-IDEA配置JDK1.8,支援Lambda新特性

CharlesYoung發表於2018-03-07

背景

  • Jdk 1.8支援Lambda新特性,想試試直接在IDEA使用,於是建立一個web專案,著手準備使用時,發現了以下的問題。環境已經中已經配置了jdk1.8環境
    圖片1

解決方法

  1. 先開啟ideaproject structure配置
    圖片2
  2. 其次將所有的模組配置成為1.8環境,這樣保證它的語法檢測不報錯,但是編譯的時候他還是選擇idea的預設配置,接下來更改編譯配置

圖片3
3. 進入idea的設定頁面,將編譯模式改成1.8

圖片4

異常問題

如果缺少第三部,會出現如下錯誤

圖片5

FAQ:

設定完成之後,如果重新啟動IDEA時,就會發現所有的設定又重新恢復到預設狀態(JDK 1.5)

原因是:

Apache Maven Compiler Plugin

The Compiler Plugin is used to compile the sources of your project. Since 3.0, the default compiler is javax.tools.JavaCompiler (if you are using java 1.6) and is used to compile Java sources. If you want to force the plugin using javac, you must configure the plugin option forceJavacCompilerUse.

Also note that at present the default source setting is 1.5 and the default target setting is 1.5, independently of the JDK you run Maven with. If you want to change these defaults, you should set source and target as described in Setting the -source and -target of the Java Compiler.
複製程式碼

解釋是:

該外掛從3.0版本開始,
預設編譯器是javax.tools.JavaCompiler (前提是JDK 1.6以後);
如果想使用javac,需要手動設定。
當前(Version: 3.5.1),
預設使用JDK 1.5解析和編譯原始碼,
與執行Maven的JDK版本無關!
複製程式碼

PS:

    <project>
      [...]
      <build>
        [...]
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
        </plugins>
        [...]
      </build>
      [...]
    </project>
複製程式碼

解決方法:

pom.xml中指定compiler的版本

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>
複製程式碼

當然還有一個簡單寫法

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>
複製程式碼

相關文章