一、问题提出
新建一个空的Maven项目,jdk使用的时1.8,但是在代码中使用lambda表达式时报错,查找原因:
- 查看项目结构,发现其语言级别为5.0,并不是与我们使用的jdk1.8项对应的8.0
- 查看编译器版本,发现时1.5,难怪使用lambda表达式会报错呢!
二、解决方案
1. 在项目的pom文件中解决
两种实现方式:
方式一:单独设置。在pom文件的properties标签中新增如下内容
<properties>
<!-- 设置Maven全局变量,使用JDK版本,默认为1.5 -->
<!-- 源文件(编译时)使用的jdk版本 -->
<maven.compiler.source>${java.version}</maven.compiler.source>
<!-- 目标字节码文件使用的jdk版本 -->
<maven.compiler.target>${java.version}</maven.compiler.target>
<!-- 自定义全局变量(多用于版本号的定义), 使用方法${lombok.version} -->
<lombok.version>1.18.16</lombok.version>
<java.version>1.8</java.version>
</properties>
方式二:插件形式设置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>utf-8</encoding>
</configuration>
<!-- 当手动引入jar包时,必须声明此项,否则项目会编译失败,Maven找不到手动引入的jar包 -->
<compilerArguments>
<!-- jar包的存放路径 -->
<extdirs>src/main/resources/lib</extdirs>
</compilerArguments>
</plugin>
</plugins>
</build>
2. 在settings文件中配置
在profiles中添加一个如下的profile,配置的时所有项目的jdk版本
<!-- 配置maven的jdk版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<!-- 该profile是否默认激活 -->
<activeByDefault>true</activeByDefault>
<!-- 通过jdk版本前缀来激活当前profile。
此处当检测到使用的jdk版本是1.8.xxx,则当前profile被激活,!1.8表示激活所有不是以1.8开头的jdk版本
-->
<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>
3. 设置编码为UTF-8
这个只能在pom文件中设置,故只有两种解法方式:
<properties>
<!-- 设置Maven全局变量,使用JDK版本,默认为1.5 -->
<!-- 源文件(编译时)使用的jdk版本 -->
<maven.compiler.source>${java.version}</maven.compiler.source>
<!-- 目标字节码文件使用的jdk版本 -->
<maven.compiler.target>${java.version}</maven.compiler.target>
<!-- 设置源码编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 设置输出文件编码 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 自定义全局变量(多用于版本号的定义), 使用方法${lombok.version} -->
<lombok.version>1.18.16</lombok.version>
<java.version>1.8</java.version>
</properties>
另一种就是方式上面代码已经给出,如图所示: