不支持 1.8 版
Posted
技术标签:
【中文标题】不支持 1.8 版【英文标题】:release version 1.8 not supported 【发布时间】:2019-02-24 10:08:19 【问题描述】:我有一个使用 Java 8 的项目。
到目前为止,我们在 pom 中将源和目标版本指定为 1.8:
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
我们想利用 Java 9+ 的“-release”选项并添加以下内容:
<maven.compiler.release>1.8</maven.compiler.release>
但是现在我们得到以下错误:
Fatal error compiling: release version 1.8 not supported
我们正在使用 maven 3.5.3、3.8.0 版中的 maven-compiler-plugin 和 Java 10 来编译项目。
这里有什么问题?
【问题讨论】:
为什么要使用不同的版本进行编译?我的意思是Java 10 用maven 编译项目和Java 1.8?使用相同的版本 @Adya 该项目可与 Java 1.8 编译,因此这是 pom.xml 中的要求。但当然它也需要与 Java 10 一起编译。没有理由只用 Java 1.8 编译这个项目 【参考方案1】:这应该可行
<maven.compiler.release>8</maven.compiler.release>
因为<release>
属性仅适用于主要版本的发行版。
顺便说一句,这是假设这是实际编译器插件配置中使用的参数,有点像:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>$maven.compiler.release</release>
</configuration>
</plugin>
【讨论】:
是的,你是对的!source
和 target
允许 1.8 和 8 有点不一致,但 release only
允许 8...
关于您提到的 maven-compiler-plugin 配置:是的,但是是间接的。上述属性仅指定为属性。我们没有在 maven-compiler-plugin 的配置块中明确提及这些属性,因为这些属性是自动读取的,不需要像您的示例中那样显式声明。
@radlan 同意,按照目前的惯例。它在声明为属性时也应该起作用。
@radlan 这种不一致是基于 JDK9+ 已将版本更改为 9.X,而 JKD8 及之前称为1.X
...此外,--release ..
仅从 JDK9+ 开始存在,但不存在之前...
我宁愿指出规范而不是复制它。规格应该保持最新,所有基于它的内容可能都不是。但我们可以接受任何 PR :)【参考方案2】:
就我而言,我必须更改版本、来源和目标。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.release>8</maven.compiler.release>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
【讨论】:
以上是关于不支持 1.8 版的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 3.3 版不支持 BuildActionExecuter 上的 forTask() 方法