为什么javac目标选项不能低于源选项?
Why javac target option can not be lower than source option?
我已阅读有关 javac
的 source
和 target
选项,它们分别定义了我的源代码编译所需的版本和我想要支持的最旧的 JRE 版本。在使用 Maven 构建工具时,我在 pom.xml 中定义了这些参数,如下所示:
<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>
,但是目标版本不能设置低于源版本,为什么会这样?
尝试使用此配置进行编译会导致错误:“编译致命错误:警告:源版本 15 需要目标版本 15”。与高于目标版本的任何其他源版本组合相同。
因为它就是这样设计的。来自 the documentation of javac in Java SE 15 for the --target option:
Note: The target release must be equal to or higher than the source release. (See --source.)
我想通常是在较新的版本中拥有您想要 运行 的旧源代码,并且在开始项目时,您选择源版本作为您想要支持的最旧版本。
查看 this answer 以获得关于向后和向前兼容性的讨论:
In brief, we can say:
- JDK's are (usually) forward compatible.
- JRE's are (usually) backward compatible.
您可以这样想:JDK 可以(通常)针对较新的版本进行编译,而 JRE 可以运行(通常)针对较旧的版本进行编译。
我已阅读有关 javac
的 source
和 target
选项,它们分别定义了我的源代码编译所需的版本和我想要支持的最旧的 JRE 版本。在使用 Maven 构建工具时,我在 pom.xml 中定义了这些参数,如下所示:
<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>
,但是目标版本不能设置低于源版本,为什么会这样?
尝试使用此配置进行编译会导致错误:“编译致命错误:警告:源版本 15 需要目标版本 15”。与高于目标版本的任何其他源版本组合相同。
因为它就是这样设计的。来自 the documentation of javac in Java SE 15 for the --target option:
Note: The target release must be equal to or higher than the source release. (See --source.)
我想通常是在较新的版本中拥有您想要 运行 的旧源代码,并且在开始项目时,您选择源版本作为您想要支持的最旧版本。
查看 this answer 以获得关于向后和向前兼容性的讨论:
In brief, we can say:
- JDK's are (usually) forward compatible.
- JRE's are (usually) backward compatible.
您可以这样想:JDK 可以(通常)针对较新的版本进行编译,而 JRE 可以运行(通常)针对较旧的版本进行编译。