“maven.compiler.release”作为源和目标的替代品?

2024-01-20

我有两个问题maven.compiler.release-tag

我想更换

<properties>
    <maven.compiler.source>12</maven.compiler.source>
    <maven.compiler.target>12</maven.compiler.target>
</properties>

to

<properties>
     <maven.compiler.release>12</maven.compiler.release>
</properties>

如果我使用<maven.compiler.release>-property,我是否还必须在插件中设置发布标签?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <!-- do I need that ? -->
        <release>12</release>
    </configuration>
</plugin>

根据https://www.baeldung.com/maven-java-version https://www.baeldung.com/maven-java-version,它被设置为两者。

如果我使用maven.compiler.release代替maven.compiler.source and maven.compiler.target, then -bootclasspath也已设置并将进行交叉编译。这是什么意思?请问编译文件大小有设置吗-bootclasspath更大还是编译需要更多时间?


其他答案中的“简单建议”将无法正常工作,因为不幸的是情况并不简单。编译器选项的含义略有不同。这maven.compiler.source and maven.compiler.targetoptions分别指的是源代码格式和生成的class文件的格式。但他们确实not考虑 API 更改:maven.compiler.release does.

所以如果你盲目地使用<maven.compiler.source>8</maven.compiler.source> and <maven.compiler.target>8</maven.compiler.target>,例如,如果您使用 Java 11 进行构建,则生成的类文件将支持 Java 8,但 API 可能仍依赖于 Java 11 更改,并在 Java 8 上运行时中断。请参阅javac 11 应如何将更高版本中重写的方法与 Java 8 目标链接起来? https://stackoverflow.com/q/64868952进行更多讨论。

如果您想指定 Java 8 但基于 Java 9+ 构建,那么解决方案就不那么简单了。您需要使用 Java 8 支持的编译器选项来指定源和目标:

<properties>
  <maven.compiler.source>8</maven.compiler.source>
  <maven.compiler.target>8</maven.compiler.target>
</properties>

然后您需要在中设置一个单独的配置文件<profiles>仅在 Java 9+ 中激活以打开maven.compiler.release option:

<profile>
  <id>java-8-api</id>
  <activation>
    <jdk>[9,)</jdk>
  </activation>
  <properties>
    <maven.compiler.release>8</maven.compiler.release>
  </properties>
</profile>

这样,如果您基于 Java 9+ 进行构建,maven.compiler.release将生效并限制 API 与 Java 8 兼容。如果您在 Java 8 上构建,则其他两个选项会将源代码和类文件格式设置为 Java 8,并且 API 根据定义将与 Java 8 兼容。

对于所有相关人员来说,更好的选择当然是尽快迁移到 Java 11。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“maven.compiler.release”作为源和目标的替代品? 的相关文章

随机推荐

  • 为什么需要在 ERD 中指出识别或非识别关系?

    在 ERD 中 弱 非识别关系是连接两个强实体的关系 并用虚线表示 强 标识关系是将强实体连接到弱实体的一种关系 弱实体是包含来自其相关实体的外键 FK 作为其自身主键 PK 的组成部分的关系 并指示通过实线 我的问题是 所以呢 为什么区分
  • Click() 方法并不总是有效

    我在 Selenium WebDriver 中进行测试时遇到问题 这Click当程序尝试单击按钮时 事件并不总是有效 在一项测试中一切正常 而在其他测试中则不然 每个测试都从一页开始 首先 用户必须从一个选项中选择一个select组件 然后
  • 检查文件扩展名

    我正在使用以下 PowerShell 代码 我需要在 if 条件下检查其扩展名 foreach line in lines extn line Split 1 if extn eq xml 有没有一种简单的方法来检查 PowerShell
  • 引用分支中switch语句的值

    Swift 有没有办法引用我在分支中打开的值 例如 switch UIDevice current userInterfaceIdiom cases default fatalError User interface idiom value
  • 如何为 Amazon ECR 配置自定义域名

    Amazon Elastic Container Repositories ECR 具有相当不人性化的 URI 例如99999999999 dkr ecr eu west 1 amazonaws com 是否可以为 ECR 配置自定义域名
  • 如何在 smack API 中处理添加请求

    我使用 Smack API 来编写我的 Google talk 客户端 现在我需要处理对此的添加请求 我将 SubscriptionMode 设置为手动 现在我必须注册存在数据包的侦听器 但我不知道如何 任何人都可以帮忙吗 我还没有尝试过
  • PDF 文件的结构? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于一个小项目 我必须解析 pdf 文件并获取其中的特定部分 简单的字符链 我想使用 python 来做
  • jq:从数组中删除元素

    我有这个 JSON 文件 想要从数组中删除一个元素 address localhost name local vars instances one two 我正在使用这个命令 jq del vars instances select ind
  • Scikit-learn RandomizedLasso 和 RandomizedLogisticRegression 已弃用

    我注意到linear model RandomizedLasso and linear model RandomizedLogisticRegression为套索回归实现稳定性选择的方法已被弃用 有谁知道为什么 稳定性选择不是一个好的方法吗
  • Xamarin.Forms 上传多个带有数据的图像

    我找到了几个有关如何在 Xamarin 中上传图像或多个图像的教程 但是 我还没有找到如何发送多个图像 每个图像都包含一些卫星数据 这是模型在服务器上的样子 public class AppFileDTO public IFormFile
  • 检查C#中的管理员权限

    我想知道程序是否以管理员身份运行 用户不必是管理员 我只想知道我的应用程序是否有权编辑某些以管理员身份运行时可编辑的受保护文件 这将返回一个 bool valid using System Security Principal bool i
  • 使用 Numpy 在 1D numpy 数组中查找局部最大值/最小值

    您能否建议 numpy scipy 中的一个模块函数可以在一维 numpy 数组中找到局部最大值 最小值 显然 最简单的方法是查看最近的邻居 但我希望有一个公认的解决方案 它是 numpy 发行版的一部分 在 SciPy 中 gt 0 11
  • Zend Framework 2 如何渲染模块内的部分?

    我的模块内的目录结构是这样的 Api Module php config module config php src etc view api api index phtml partial test phtml 然后 我正在这样做 但是
  • 在SQL中计算两个日期之间的差异,不包括周末

    我想构建一个 SQL 查询来计算两个日期之间的差异 而不计算结果中的周末天数 有没有办法格式化日期以获得这个结果 以 Oracle 数据库为例 select sysdate creation dttm from the table 你应该尝
  • 在 Objective-C 中使用 C 函数(适用于 iPhone)

    大家好 我自称是 iPhone 编程新手 拥有更长的 Perl 和 Web 背景 30 年 但上周我冒险买了几本好书 在死记硬背并阅读了 1000 多页之后 并且对它有了很好的理解之后 我已经朝着第一个优秀的原生 iPhone 应用程序迈进
  • 使用 IntelliJ 设置 scala

    我有 Intellij Ultimate 11 1 安装了 scala 插件 我使用 homebrew 安装了 scala 2 9 2 其中将 scala 放入 usr local Cellar scala 2 9 2 gt gt whic
  • 使用 PyCrypto 使用 32 字节初始化向量解密 MCRYPT_RIJNDAEL_256

    我有用 PHP 加密的数据 如下所示 mcrypt encrypt MCRYPT RIJNDAEL 256 SECRET data MCRYPT MODE CBC iv 我需要在 Python 3 应用程序中解密这些数据 我正在尝试使用 P
  • 抛出异常后返回

    有什么好处吗return之后的值throw出现异常吗 如果没有的话可以return语句被省略 是否可以以某种方式消除编译器错误C4715 not all control paths return a value 提前致谢 编辑 示例代码 f
  • 通过数字索引访问 Dictionary.Keys 键

    我正在使用一个Dictionary
  • “maven.compiler.release”作为源和目标的替代品?

    我有两个问题maven compiler release tag 我想更换