版本1.8不受支持

16

我有一个使用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,maven-compiler-plugin的版本为3.8.0和Java 10来编译该项目。

这里有什么问题?


为什么你在编译时使用不同的版本?我的意思是,用Java 10编译项目,而用Maven则是Java 1.8?请使用相同的版本。 - Adya
2
@Adya 这个项目可以使用Java 1.8进行编译,因此这是pom中的要求。但当然它也需要能够使用Java 10进行编译。没有理由_仅仅_使用Java 1.8编译这个项目。 - radlan
2个回答

20

这应该可以运行

<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>

4
没错,你说得对!sourcetarget允许1.8和8有点不一致,但是“仅发布”只允许8... - radlan
2
关于您提到的maven-compiler-plugin配置:是的,但是间接的。上述属性仅被指定为属性。我们没有在maven-compiler-plugin的配置块中明确提及这些属性,因为这些属性会自动读取,不需要像您的示例那样进行显式声明。 - radlan
@radlan同意,按照当前的惯例实践。当声明为属性时,它也应该能够工作。 - Naman
1
@radlan,这种不一致性是基于JDK9+将版本更改为9.X,而在JDK8及之前被称为“1.X”...此外,“--release ..”仅存在于JDK9+之后,而不是之前... - khmarbaise
1
我更喜欢指向规范而不是复制它。规范应该保持最新状态,所有基于它的内容可能不是。但我们可以接受任何PR :) - Robert Scholte
显示剩余3条评论

1
在我的情况下,我需要更改发布、源和目标。
  <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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接