你好,再一次到另一个热点。 我的名字是Java Champions平台工程师兼DevOps专家Peter Pilgrim。

如您所知,Java 9引入了模块系统。 您可能正在将服务迁移到JDK 10或更高版本,或者至少在考虑中。 我对企业的一般建议是,您越早迁移,技术债务就越好。 在2018年9月发布Java 11时,更容易适应变化。

在撰写本文时,我建议在传统的单片系统上迁移作为严格的微服务编写的软件体系结构要容易得多。 为什么会这样呢? 可以一对一或定义的工作组来适应和更改微服务。 为此,您的微服务必须彼此独立,这意味着它们依赖于REST API或XML over SOAP over HTTP通信或其他远程调用协议。

迁移的最大障碍是工具,堆栈依赖项以及专有技术。 让我们对其中的每一个进行一些包装。

工具–所有主要的IDE现在都支持Java10。它们是NetBeans,Eclipse和IntelliJ2018。因此,编译基本Java程序应该没有问题。 我们大多数专业人士倾向于使用Gradle和Apache Maven等构建工具。 如果您依赖Maven,则需要更改编译器插件版本3.7.0或更高版本。 Gradle交付团队可以使用便捷的指南,其中介绍了如何为示例项目添加手动支持。 请注意,在撰写本文时,当前的Gradle发行版4.6不具有一流的支持。 不幸的是,Gradle需要花很多力气才能获得Java 9支持。 “构建Java 9模块”具有所有详细信息,如果您现在希望在团队的构建中获得Java 9模块的支持,请阅读本书。

堆栈依赖关系–最大的障碍是库的依赖关系。 如果它们是开源的,那么可能即将收到Java 9支持,并且很快就会推出。 许多专业的服务器端团队都依赖于Hibernate,Spring Framework,Spring Boot和Java EE的其他方面。 最糟糕的是,由于每个工程都依赖于其中的一个,因此实际的servlet容器可与Java 10一起使用。因此,强烈建议您亲自验证Tomcat,Payara和WildFly在Java 10运行时环境中执行。 它应在没有任何已部署WAR文件的状态下执行。 Pivotal在其最新版本的Spring Boot 2.0中已经为OpenJDK 9编写了轶事支持,您可能很幸运。

最后,从长远来看,对Java模块系统的了解会有所帮助。 因为最终所有最重要的框架和库都将被模块化,所以开发运维人员/平台工程师为什么会延迟对模块系统的学习。

工程师将不得不根据这些概念

  • 拆分包 – Java 9中的每个模块都必须包含唯一的包。 工作遗留和当前代码库中的许多JAR可能都有拆分的程序包,同一程序包显示一个或多个JAR。 这可能包括开源和商业第三方库。 然后,您的主要工作是重构和重新架构您拥有的模块,第三方供应商和图书馆团队将对他们的软件负责,他们将自己做。
  • 自动模块 – Java 9的这一概念自动从类路径中将JAR导出为模块
  • 未命名模块 –这种将类加载到模块系统之外但从类路径加载的概念。 不属于“命名模块”成员的类被认为是称为未命名模块的特殊模块的成员
  • 服务发现 – JDK 9中的服务API进行了改进,可以跨模块加载类。
  • 开放式模块 –此概念允许在运行时检查模块
  • 供应模块 –此概念定义模块之间的传递依赖
  • 模块化资源 –这个概念定义了加载资源,现在仅限于模块。 您需要另一个模块中的资源,然后必须在module-info.java文件中明确配置
  • 模块和类路径 -不幸的是,库编写者必须跨模块路径和类路径针对Java 8(非模块)和Java 10(模块)测试其代码库。 这是迁移的最大缺点。

我的第一个建议是找到这些拆分包。 我写了一段shell脚本和Python来帮助我编写一份总体报告。

就这样。 享受车程

这里是对本文内信息的引用:

翻译自: https://www.javacodegeeks.com/2018/05/migration-advice-for-java-10.html