1:问题描述
Eclipse中的Maven项目,本地Java版本1.8,每次右击项目--maven--update project(Alt+F5) 后,项目JRE System Library 都变为1.5。
2:异常原因
查看Maven官网 如下:
This is a known "feature" of Maven. The default compiler source/target version is 1.5 unless you explicitly specify a version in your POM. The way Maven integration in Eclipse works, it (re)generates your .project
, .classpath
and .settings
from the POM, so unless the POM specifies the correct JDK version, it will get reset to 1.5 every time you update the project configuration.
中文:
这是Maven已知的一个特性。除非在你的POM文件中显示的指定一个版本,否则会使用编译器默认的source/target版本1.5。主要还是在于Eclipse中Maven的集成方式起到了关键作用, 它会从POM文件中生成项目的.project,.classpath以及.settings, 因此除非POM文件指定了正确的JDK版本, 否则你每次更新项目配置的时候它都会重置到1.5版本。
图一:
编译器插件用来编译项目的源文件从3.0版本开始,用来编译Java源文件的默认编译器是javax.tools.JavaCompiler (如果你是用的是java 1.6) ; 如果你想强制性的让插件使用javac,你必须配置插件选项 forceJavacCompilerUse.。
图二:
目前source选项和target 选项的默认设置都是1.5,与运行Maven时的JDK版本无关;如果你想要改变这些默认设置,,可以参考 Setting the -source and -target ofthe Java Compiler中的描述来设置 source 和target 选项。
3:解决办法
办法一:在pom.xml文件中手动指定source和target的jre版本
<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>
办法二:在Maven的配置文件setting.xml中手动指定jdk、source和target的版本
<profiles>
<profile>
<id>maven-default-jre</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>