1. 程式人生 > >maven maven.compiler.source和maven.compiler.target的坑

maven maven.compiler.source和maven.compiler.target的坑

ons org png 圖片 pre plugins html exe 自動

最近建議產品組把jdk 1.7升級到1.8,昨晚開發報了個問題過來,說maven.compiler.source和maven.compiler.target改成1.8之後,編譯出來的代碼還是1.7,如下:

技術分享圖片

也可通過javap -v ServiceImpl.class 查看class文件的java編譯版本號。

下午抽空看了下,果不其然,第一懷疑就是maven.compiler.source和maven.compiler.target這兩參數不靠譜。

看了下,IDE配置的JDK,如下:

技術分享圖片

自動build之後,的確是jdk 1.7,如下:

技術分享圖片

換成J2SE-1.8

技術分享圖片

技術分享圖片

換成1.6

技術分享圖片

技術分享圖片

查詢maven官方文檔,可知maven.compiler.source和maven.compiler.target僅僅是推薦,不是強制。

如果要強制jdk版本,可指定executable屬性來保證,如下:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</
artifactId> <version>3.7.0</version> <configuration> <verbose>true</verbose> <fork>true</fork> <executable><!-- path-to-javac --></executable> <compilerVersion>1.3</compilerVersion
> </configuration> </plugin> </plugins> [...] </build> [...] </project>

問題解決。

參考:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

maven maven.compiler.source和maven.compiler.target的坑