Maven默认编译版本是JDK1.5,在很多时候,发现有些代码报错,又找不到原因,很有可能是没有配置JDK版本。
就如有一次我遇到的问题:定义全局异常处理类继承HandlerInterceptorAdapter时候,preHandle方法上面有@Override就一直报错,点开HandlerInterceptorAdapter源码,明显是有这个方法,后来发现JDK版本的问题。
指定Java的编译版本和源文件编码方式:
方式一:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
方式二:
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
以上两种方式都只对单个项目生效。当然,如果该pom作为父pom,那么对继承此pom的所有项目也会生效。
另外,两种方式都写上的话,不确信的说,应该是第二种生效(只是简单的验证了一下)
方式三:全局设置
在${MAVEN_HOME}/conf/setting.xml中改变默认的编译版本,修改settings.xml文件,在profiles节点里添加如下设置
<profile>
<id>JDK1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
</properties>
</profile>
惯例:单个项目配置的优先级要高于全局配置