最近建議產品組把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