maven编译项目报错“Error:(109,32) java: -source 1.5 中不支持 diamond 运算符”,怎么解决?

2 篇文章 0 订阅

pom.xml 中配置的 java.version 到底有什么用?

Maven 项目

对于使用 Maven 脚手架直接创建的项目(或模块),如果在 pom.xml 中只配置了 java.version:

<properties>
    <java.version>1.8</java.version>
</properties>

我们最常碰到的问题就是编译错误:

Error:(109,32) java: -source 1.5 中不支持 diamond 运算符

SpringBoot 项目

对于使用 SpringBoot 创建的项目(或模块),我们在 pom.xml 中配置 java.version 参数后,项目(或模块)即可以按照我们指定的 java 版本进行编译。那么,java.version 参数怎么起作用的?

我们在pom.xml中找到 parent 元素:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

打开 parent 能看到 properties 元素:

<properties>
    <java.version>1.8</java.version>
    <resource.delimiter>@</resource.delimiter>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

可以看到 java.version 被 maven.compiler.source 和 maven.compiler.target 元素引用,以指定编译时源文件(.java)和目标文件(.class)的 java 版本。

问题的结论

  • 第一,java.version 并非 Maven 官方定义的参数,而是 SpringBoot 官方定义的参数;
  • 第二,java.version 被用于指定编译时源文件和目标文件的 java 版本。

据此,对于使用 Maven 脚手架创建的项目(或模块),建议在 pom.xml 中配置如下:

<properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值