java - 为什么 javac 目标选项不能低于源选项?
问题描述
我已经阅读了关于它们的选项source
和target
选项javac
,它们分别定义了我的源代码编译所需的版本和我想要支持的最旧的 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”。与源版本高于目标的任何其他组合相同。
解决方案
因为它就是这样设计的。从Java SE 15 中 javac 的文档中获取 --target 选项:
注意:目标版本必须等于或高于源版本。(见--source。)
我想通常是拥有想要在较新版本中运行的旧源代码,并且在开始项目时,您选择源版本作为您想要支持的最旧版本。
查看此答案以讨论有关向后和向前兼容性的讨论:
简而言之,我们可以说:
- JDK(通常)是前向兼容的。
- JRE(通常)是向后兼容的。
您可以这样想:JDK 可以(通常)为较新的版本进行编译,而 JRE 可以(通常)运行较旧的版本。
推荐阅读
- r - 删除连接 geom_line
- python - 在 django 中导入文件
- mysql - 如何在单个 MySQL 查询中选择多个平均值?
- c - C语言数组&for循环不能正常工作
- jquery - 验证使用 jquery laravel 附加的手风琴 div 元素
- c# - 从作为实例方法的反射 MethodInfo 创建静态 MethodInfo
- c# - 如何使用 Windows 窗体更改运行中创建的图片框的可见性
- django - 为什么我无法在 heroku 上打开 django 应用程序?
- javascript - 如何确保加载所有 HTML
- javascript - CSS/Javascript 翻转动画在 Safari 中不起作用