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
基础教程推荐
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 降序排序:Java Map 2022-01-01