【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

Oracle 的 Java 模块化系统保卫战

  • 2017-06-25
  • 本文字数:2746 字

    阅读完需:约 9 分钟

2017 年企业新兴技术(ETE)大会上最为及时的演讲之一要算由 Oracle JVM 负责人 Karen Kinnear 呈献的“ Java 的未来:模块化及其他”。在她演讲之前的这段时间发生了很多事情,其中最为引人瞩目的就是 5 月 8 号针对 JSR 376 的投票事件。

Kinnear 介绍了 Java 9 的目标,包括提升开发者效率和改进 Java 云 API。在对 Java 9 相关的 JEP 进行了一番评述之后,她开始专注于 Java 平台模块化系统(JPMS)的话题。JPMS 也就是 Jigsaw 项目 JSR 376

Kinnear 向参会人员问了三个有关模块化的问题。

  • 模块遗漏问题。
    • 模块系统在构建模块图时会检测遗漏的模块。
  • 冲突问题。
    • 在构建模块图时包的冲突问题也会被检测到。
  • 变更内部 API 是否安全?
    • 模块系统可以确保无法从模块外部访问内部的 API。

Kinnear 说,模块可以被集成到已有的应用程序里,她还演示了包与模块之间如何进行交互,解释了模块路径和类路径之间的区别。她还向开发者介绍了如何迁移到 Java 9,特别是如何在迁移过程中保持向后兼容。

Oracle Java 平台组的首席架构师 Mark Reinhold 在 2016 年 3 月份的白皮书中描述了 JPMS 的目标。

  • 可靠的配置
    • 使用声明式的程序组件依赖机制代替脆弱且容易出错的类路径机制。
  • 强封装
    • 组件可以声明自己的哪些公共类型是可以被其他组件访问哪些是不能被访问的。

社区的反应

Red Hat 的 JBoss 架构副主席 Scott Stark 表达了他对 JPMS 存在的一些疑问,Red Hat 认为这些问题是影响 JPMS 无法达成 JSR 提交目标的主要因素。Stark 说:

Jigsaw 是一个全新的模块化系统,它可以很好地应用在 Java 上,但并没有在生产环境里那些基于 JVM 的真实应用上大规模尝试应用 JPMS。很多应用程序可能无法使用 Jigsaw,或者需要进行重大的重构才可以。

IBM 和 Red Hat 公开表示他们不会为当前的JPMS 投赞成票

尽管没有达成一致意见,Reinhold 仍然提交了JSR 376 公开预览版,并声明“这对于广大的Java 生态圈来说是最有益的,我们因此可以达成切实的目标”。在投票当天,他还向执行委员会(EC)提交了一封公开信,呼吁他们能够为JSR 376 投赞成票。不过,最终JSR 376 仍然没能通过投票。

投票之后

Twitter 的 JVM 和 GC 工程师 Tony Printezis 解释了 Twitter 投反对票的原因

我们的主要疑问在于,JPMS 有可能会颠覆开发者,但却未能给他们带来直接的好处。我们担心因此会阻碍这项技术的大规模采用。我们希望 JPMS 能够对最初的目标做更全面的调整,从而真正地解决开发者的痛点。比如,非公开包名称冲突就与当前 JSR“不互相干扰”和“强封装”的目标不一致。而如果模块能够更加彻底地分离,那么就可以通过把包隐藏在模块内部来支持相同包的多个复本同时存在。如此直观的好处简化了开发人员模块化代码的工作,也因此能够加速 JPMS 的采用速度。

在与 InfoWorld 的一次访谈中,Reinhold 尝试着澄清人们对JPMS 的误解。关于人们反对无法在Java 中使用Maven 这一问题上,Reinhold 说,这不是真的,“Maven 可以在Java 9 里使用”。不过他承认,Maven 的插件可能无法正常运行,包括 Surefire 测试插件

Reinhold 确认了开发者最喜欢的一些库、框架和工具可能无法在 Java 9 中使用,这是因为当下的一些因素造成的,不过他说在正式发布时可能可以解决这些问题。他指出,这些项目的维护者已经在使用 Java 9 抢先版,所以他们会为这些项目做好支持 Java 9 的准备。这也就是为什么一些项目已经可以使用 Java 9,如 Spring Boot Hibernate Validator

很多开发团队认为,在他们将所有代码、框架和库模块化之前就不能使用 Java 9。Reinhold 说这也是不对的。

开发人员可以在 Java 9 里继续使用类路径,不过因为 Java 9 有了模块机制,所以开发人员就不再需要类路径了。

伦敦 Java 社区共同创始人及 jClarity CEO Martijn Verburg InfoQ 交流了他对 JSR 376 投票的看法。在谈到 JVM 模块化的好处时,他说:

它为 Java 代码提供了更多的安全性;它隐藏了很多内部 API 或者不应该暴露给开发人员的 API;不过需要为那些被隐藏的功能提供安全的替代方案。Java 的运行时将变得更小,因为运行时被拆分成更小的模块。Java 9 将提供 jlink 工具,用于将应用程序部署在更小的运行时上,只安装必要的组件。服务器端的应用程序就不需要把客户端的 GUI(如 AWT 何 Swing)也包含在内。这样,Java 可以启动得更快,可以在更小的设备上运行应用,在云端的部署也会更快。

IBM 的高级技术研究员 Tim Ellison 最近表达了他对如何在 JSR 376 上达成共识的看法。他说:

我们希望看到修订过的规范重新呈现给 JCP 执行委员会,也希望执行委员会能够支持专家组的结论。IBM 关心的是企业应用在迁移到 Java 9 时的兼容性问题。升级到 Java 9 对迁移有重大的影响,而 JPMS 的默认行为在这方面会提供很大的帮助。

JSR 376 即将进入到终稿阶段。在定稿之前可能还有一些小幅度的改动,不过整个过程充分展示了 JCP 致力于为 Java 提供更加强大的语言特性。感谢 Oracle 一直在主导这个规范,以及专家组在这个里程碑上所投入的大量精力。

Reinhold 最近针对 Java 9 的 GA 版本发布日期提出了一个新的提议。他说:

为了迎接各种可能的结果,我建议保持 6 月 22 号的 JDK 9 初始候选版本发布日期不变,不过将 GA 版本的发布日期向后延期,为通过 JCP 流程争取更多的时间。我提议将 GA 版本的发布日期向后延期 8 周,从 7 月 27 号调整为 9 月 21 号。

JSR 376 的下一个投票日期是周一,也就是 2017 年 6 月 26 号。

参考资料

编辑后记

Michael Redlich 是 ETE 的积极参与者,他从 2008 年开始作为 ETE 的参会者和演讲者,2013 年成为 ETE 指导委员会的成员。

查看英文原文 Oracle Defends the Java Module System

2017-06-25 19:003021
用户头像

发布了 322 篇内容, 共 134.5 次阅读, 收获喜欢 144 次。

关注

评论

发布
暂无评论
发现更多内容

面试被吊打系列:气得我直接把简历上的精通数据库给删掉了

Java 程序员 后端

面试被问Tomcat整体架构设计,我哭的像个孩子

Java 程序员 后端

1000页神仙文档,连阿里P8面试官都说太详细了,面面俱到!搞懂这些直接P6+

Java 程序员 后端

1024 的那天,我这个三线的程序员是这样度过的,阿里巴巴高级java工程师薪酬

Java 程序员 后端

首全网发!2021最新版字节面经刷题笔记,已霸榜GitHub

Java 程序员 后端

高频MySQL面试题:MySQL 索引使用什么数据结构?为什么用 B+做索引

Java 程序员 后端

10个 解放双手的 IDEA 插件,少些冤枉代码,java程序员进阶路线

Java 程序员 后端

面试官:谈谈你对线程池的理解

Java 程序员 后端

高并发下Mysql主从延迟处理方案

Java 程序员 后端

高龄程序员的面临的处境:你有时候没有错,只是年纪大了

Java 程序员 后端

-So-easy!多图详解CLH锁的原理与实现,轻松把握AQS,nginx原理及应用

Java 程序员 后端

双十一揭秘 1 :如何保证流量激发的时候不宕机?

青云技术社区

云计算 PaaS SaaS 云平台

面试时通过volatile关键字,全面展示线程内存模型的能力

Java 程序员 后端

项目构建系统之 Maven

Java 程序员 后端

license是什么意思?谁能解释一下?

行云管家

云计算 LICENSE IT运维

设备巡检管理系统,为企业降本增效

低代码小观

企业管理 管理系统 设备巡检 企业设备管理 设备巡检管理系统

10个经典场景带你玩转SQL优化,Java笔试题算法题

Java 程序员 后端

面试官:小伙子我们先来唠唠并发编程的几大核心知识点

Java 程序员 后端

2021年11月数据库排行解读:openGauss跃居第三,人大金仓晋身前十

墨天轮

MySQL 数据库 oracle TiDB 国产数据库

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 程序员 后端

面试:第六章:面试题收集

Java 程序员 后端

腾讯云TDSQL重磅发布全自研新敏态引擎

科技热闻

面试官:数据库自增 ID 用完了会咋样?

Java 程序员 后端

高可用RabbitMQ集群的搭建及原理分析

Java 程序员 后端

高可用延迟队列设计与实现

Java 程序员 后端

免费试用的堡垒机哪里有?哪家好?咨询电话多少?

行云管家

网络安全 数据安全 等级保护 IT运维

面试官:数据库自增 ID 用完了会咋样?(1)

Java 程序员 后端

面试过阿里的P7大佬分享:180+道Java面试题目!含答案解析!

Java 程序员 后端

高并发负载均衡:网络协议原理(三)

Java 程序员 后端

100道 IT名企前端面试真题,java教程pdf百度网盘

Java 程序员 后端

10万字Spring Boot详细学习笔记+源码免费开放下载,京东T7大牛纯手写出来的!

Java 程序员 后端

Oracle的Java模块化系统保卫战_Java_Michael Redlich_InfoQ精选文章