Migrating Java 8 project to Java 11(将Java 8项目迁移到Java 11)
问题描述
我们有一个使用Java 8构建的存储库。存储库中有多个REST服务。我们想要迁移到Java 11,并试图找出实现这一目标的最佳方式。我们正在考虑一个模块一个模块地做。例如,将一个服务更改为Java 11,而其余服务仍为Java 8。我们不确定Maven是否支持这一点?
推荐答案
免责声明:这不是答案,只是我最近经验的一部分。如果您觉得此答案不符合SO标准,请随时标记此答案。
Maven是否支持此功能?
是,使用编译器插件3.8.0/3.8.1
但是,此迁移需要额外注意。
最近我们通过从Oracle JDK 8迁移到OpenJDK 11做了类似的事情。由于我们有大量具有不同任务的存储库,我们面临着各种各样的问题。仅引用我在我的电子邮箱中标记为[jdk11_Migration]的一些内容:
这很明显,但我想强调的是,为了从Java 8迁移到11,我们还必须满足Java 9和10的要求
一些maven插件,如Cobertura,不支持Java 11,我猜他们永远不会支持它。在某些情况下,这些插件已经到了废弃的生命周期阶段。解决办法是以案件对案件的方式寻找替代方案。例如,我们用Jacoco替换了Cobertura。
rt.jar和tools.jar已被删除!你从他们那里得到的任何明确的东西都可能会被打破。
一些我们现在不应该在Java 9或更低版本中使用的类在Java 11中不再存在。我说的是访问Sun.*、sun.misc等包中的类。解决方案是寻找一对一的替代方案或重构代码以避免使用。
反射通常是最后使用的项目符号,对于这些情况,在Java 9和更高版本中,我们会收到如下警告消息:
WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by ... WARNING: Please consider reporting this to the maintainers of ... WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release
- Java 9引入了模块系统,然后"现在"我们就有了包冲突的现象。例如,"可以从多个模块访问org.w3c.dom包:,java.xml"之类的消息。解决方案是找到冗余包含项的来源(特别是重复的maven依赖项或依赖项的依赖项)并将其删除。
这篇关于将Java 8项目迁移到Java 11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将Java 8项目迁移到Java 11
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01