将Java8项目迁移到Java11
我们有一个使用Java8构建的存储库。存储库中有多个rest服务。我们想迁移到Java11,并试图找出实现这一点的最佳方法。我们正在考虑一个模块一个模块地做。例如,将一个服务更改为Java11,而其余服务仍然是Java8。我们不确定Maven是否支持这一点?我的建议是升级整个项目。尝试使用一些Java8和Java11模块可能非常困难。正如您已经知道的,从Java9开始出现模块。答案非常笼统,因此很难给出详细的答复。我想:将Java8项目迁移到Java11,java,java-8,java-11,Java,Java 8,Java 11,我们有一个使用Java8构建的存储库。存储库中有多个rest服务。我们想迁移到Java11,并试图找出实现这一点的最佳方法。我们正在考虑一个模块一个模块地做。例如,将一个服务更改为Java11,而其余服务仍然是Java8。我们不确定Maven是否支持这一点?我的建议是升级整个项目。尝试使用一些Java8和Java11模块可能非常困难。正如您已经知道的,从Java9开始出现模块。答案非常笼统,因此很难给出详细的答复。我想: 您的项目由maven管理 你有很多手工艺品(罐子) 您正在使用某个库或框
- 您的项目由maven管理
- 你有很多手工艺品(罐子)
- 您正在使用某个库或框架(谁说的是Spring?)
- 您正在使用源代码版本控制(例如Git或Subversion)
- 你有一个多模块的项目
- 您编写的代码适用于Java8和Java11平台
希望有帮助。免责声明:这不是答案,只是我最近经历的部分报告。如果您觉得这个答案不符合SO标准,请随意标记它 Maven支持这一点吗 可以,使用编译器插件3.8.0/3.8.1 但是,这种迁移需要额外小心 最近,我们通过从OracleJDK8迁移到OpenJDK11完成了类似的工作。由于我们有许多不同任务的存储库,我们面临着各种各样的问题。我在我的邮箱中找到了一些标记为[jdk11_migration]的信息:
- 很明显,但我想强调的是,为了从Java8迁移到Java11,我们还必须满足Java9和Java10的要求
- 一些maven插件,比如cobertura,不支持Java11,我想他们永远不会支持它。在某些情况下,这些插件已经达到了废弃的生命周期阶段。解决方案是以个案的方式寻找替代方案。例如,我们用Jacoco取代了cobertura
- rt.jar和tools.jar已被删除!你从他们那里明确提到的一切都可能会破裂
- 一些我们不应该在Java9或更少版本中使用的类现在在Java11中不再存在。我说的是访问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
- Java9引入了模块系统,然后“现在”出现了包冲突的现象。例如,诸如“包org.w3c.dom可以从多个模块访问:,java.xml”。解决方案是找到冗余包含的来源(特别是重复的maven依赖项或依赖项的依赖项)并将其删除
幸运的是,您可以在SO或internet上的迁移过程中找到关于每个问题的好问题和答案。在野外有一些迁移指南,它们是很好的起点。具体问题,如混淆和IDE集成,可能需要一点时间,但至少在我的经验中,这次迁移比我想象的要轻松。我遇到了同样的问题。Maven支持除部署部分之外的所有迁移。这是由详细日志引起的如果你有一个模块级pom,你可以在编译阶段控制特定模块的JAVA版本。试着就你在迁移过程中遇到的问题发布具体的示例,根据具体情况回答会更容易。您可以尝试使用IBM的应用程序二进制文件迁移工具包-也许这将有助于您获得良好的测试覆盖率?