写点什么

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:003109
用户头像

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

关注

评论

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

火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?

字节跳动数据平台

大数据 游戏 AB testing实战 12 月 PK 榜

LED透明屏在夜晚经济有怎样的发展机遇

Dylan

LED LED显示屏

通过认证|龙智正式成为Atlassian云专业伙伴

龙智—DevSecOps解决方案

云原生

华为云低代码技术:让矿区管理“智变”,一览无遗

华为云开发者联盟

云计算 低代码 华为云 12 月 PK 榜

MMM互助系统开发智能合约部署

薇電13242772558

dapp

Golang中利用BPF进行动态追踪

MatrixOrigin

Go 数据库 云原生 MatrixOrigin MatrixOne

软件测试 | 测试核心:如何减少线上故障?

测试人

软件测试 软件质量 自动化测试 测试开发

DTALK直播预约 | 12月8日开播:后疫情时代,制造企业如何实现数字化转型?

袋鼠云数栈

数字化转型

积分盲盒商城系统开发方案(成熟定制技术)

I8O28578624

源码解析:Dubbo3 的 Spring 适配原理与初始化流程

Apache Dubbo

Java 开源 微服务 dubbo

一站式动态多环境建设案例

阿里巴巴中间件

阿里云 微服务 云原生 中间件 客户案例

React 之 Refs 的使用和 forwardRef 的源码解读

冴羽

JavaScript react.js 前端 前端框架 React

EasyRecovery2023不要钱的硬盘数据恢复工具

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

如何用 7 分钟击破 Serverless 落地难点?

Serverless Devs

DQMIS 2022第六届数据质量管理国际峰会议程新鲜出炉

数据质量管理智库

大数据 数据 数据治理 数据安全 隐私计算

如何设计业务异地多活架构 - week7

in9

隐藏复杂、抽象概念,「技术无感化」 ——The Future of Database2022 | 黄东旭新番

B Impact

Meta Force佛萨奇2.0元宇宙项目系统开发技术讲解方案

I8O28578624

版本控制 | 一文了解什么是组件化开发,以及如何从单体架构转向组件化开发

龙智—DevSecOps解决方案

组件化 组件化开发

喜讯!YMatrix 当选新能源汽车国家大数据联盟理事单位

YMatrix 超融合数据库

数据库 新能源汽车 新能源 超融合数据库 YMatrix

4.0体验站|OceanBase 4.0,从分布式到单机,从单机到分布式

OceanBase 数据库

数据库 oceanbase

AWS CEO Adam Selipsky 演讲 Keynote @ re:Levent2022

B Impact

神秘新品即将来袭!大上科技开启护眼新未来倒计时

硬科技星球

中国敏捷十年实践者分享:敏捷教练的自我修为

华为云开发者联盟

云计算 华为云 12 月 PK 榜

实践案例丨CenterNet-Hourglass论文复现

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

听软件测试自动化“领导者”讲解如何降本、增效与提质

龙智—DevSecOps解决方案

测试 自动化测试 测试自动化

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

龙智—DevSecOps解决方案

代码质量 代码安全检测 代码安全 安全防护

实时数据赋能制造业产能升级:详解半导体和汽车制造行业最佳实践(活动报名)

tapdata

制造业 数据集成 汽车制造 实时数据 半导体行业

携程商旅CEO张勇:TMC不止一站式解决方案 携程商旅推出“产品云图”

携程商旅

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

Lansonli

Python游戏 Python足球游戏 世界杯足球游戏

亚马逊CTO Werner Vogels 演讲Keynote:世界一直无序地运转向前 @AWS re:Invent 2022

B Impact

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