为什么javac目标选项不能低于源选项?

问题描述 投票:0回答:2

我已经阅读了有关

source
target
的选项,它们分别定义了我的源代码编译所需的版本和我想要支持的最旧的 JRE 版本。在使用 Maven 构建工具时,我在 pom.xml 中定义了这些参数,如下所示:
javac

,但是目标版本不能设置低于源版本,为什么会这样呢?

尝试使用此配置进行编译会导致错误:“致命错误编译:警告:源版本 15 需要目标版本 15”。与源版本高于目标版本的任何其他组合相同。

java maven javac
2个回答
5
投票
Java SE 15 中关于 --target 选项的 javac 文档

注意:

目标版本必须等于或高于源版本。 (参见--来源。)

我想通常是拥有想要在较新版本中运行的旧源代码,并且在启动项目时,选择源版本作为您想要支持的最旧版本。

查看

这个答案

,了解有关向后和向前兼容性的讨论:

简而言之,我们可以说:

JDK(通常)是向前兼容的。
  • JRE(通常)向后兼容。
您可以这样想:JDK(通常)可以编译较新的版本,而 JRE(通常)可以运行较旧的版本。


0
投票

不过,您必须为在 JRE 11 上运行的项目创建一个库。

你要做什么?

这些选项可以帮助您。 只需通过

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>15</source> <target>11</target> </configuration> </plugin> </plugins> </build>

 编译你的代码
一切都会正常运行

© www.soinside.com 2019 - 2024. All rights reserved.