将Java 8项目迁移到Java 11

Migrating Java 8 project to Java 11(将Java 8项目迁移到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
    
虽然这不是一个确切的解决方案,但是有一个标志可以消除这个警告--非法访问=许可。在使用Surefire Maven插件时,这一点尤其重要。

  • Java 9引入了模块系统,然后"现在"我们就有了包冲突的现象。例如,"可以从多个模块访问org.w3c.dom包:,java.xml"之类的消息。解决方案是找到冗余包含项的来源(特别是重复的maven依赖项或依赖项的依赖项)并将其删除。
虽然这对我们来说不是问题,但我只是注意到您的存储库主要由REST组件组成。您可能会遇到与一些包有关的ClassNotFound问题,比如基本从Java标准版中删除的javax.xml.ind。您可以通过在pom.xml中显式地包含它们来修复它。

幸运的是,对于你在SO或互联网上的迁移过程中发现的每一个问题,你都可以找到好的问题和答案。野外有一些迁徙指南,它们是很好的起点。像混淆和IDE集成这样的特定问题可能需要一些时间,但至少在我的经验中,这次迁移比我想象的要轻松。

这篇关于将Java 8项目迁移到Java 11的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:将Java 8项目迁移到Java 11