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向参会人员问了三个有关模块化的问题。

\\

  • 模块遗漏问题。 \\t

    • 模块系统在构建模块图时会检测遗漏的模块。\\t

    \\t

  • 冲突问题。 \\t
    • 在构建模块图时包的冲突问题也会被检测到。\\t

    \\t

  • 变更内部API是否安全? \\t
    • 模块系统可以确保无法从模块外部访问内部的API。\\t

    \

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

\\

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

\\

  • 可靠的配置 \\t

    • 使用声明式的程序组件依赖机制代替脆弱且容易出错的类路径机制。\\t

    \\t

  • 强封装 \\t
    • 组件可以声明自己的哪些公共类型是可以被其他组件访问哪些是不能被访问的。\\t

    \

社区的反应

\\

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号。

\\

参考资料

\\

  • OSGi and Java 9 Modules Working Together by Neil Bartlett (November 13, 2015)\\t
  • Java 9, OSGi and the Future of Modularity (Part 1) by InfoQ (September 22, 2016)\\t
  • Java 9, OSGi and the Future of Modularity (Part 2) by InfoQ (October 4, 2016)\\t
  • Concerns Regarding Jigsaw (JSR 376, Java Platform Module System) by Scott Stark (April 14, 2017)\\t
  • IBM and Red Hat to Vote “No” on Java Modules (Jigsaw) by InfoQ (May 1, 2017)\\t
  • Mark Reinhold Confirms JPMS (Jigsaw) will be Submitted for Public Review, Despite Community Concernsby InfoQ (May 4, 2017)\\t
  • Twitter’s Vote on JSR 376 (Java Platform Module System) by Tony Printezis (May 10, 2017)\\t
  • Oracle’s Java Chief Debunks ‘Misconceptions’ about Java 9 by Paul Krill (May 17, 2017)\\t
  • Martijn Verburg on the JCP EC “No” Vote for the Java Platform Module System by InfoQ (May 19, 2017)\\t
  • Building Consensus on JSR 376 by Tim Ellison (May 26, 2017)\\t
  • Proposed Schedule Change for JDK 9 by Mark Reinhold (May 30, 2017)\

编辑后记

\\

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

\\

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

Oracle的Java模块化系统保卫战相关推荐

  1. 走近Java模块化系统OSGi

    OSGI是什么? 刚入软件开发行业的初哥可能会觉得到处都是值得顶礼膜拜的大神,到处都是复杂到自已无法把握的代码,惊叹这些大神怎样能写出如此神奇的程序出来?! 其实真正好的软件的代码,应该是结构清晰,简 ...

  2. 深入理解OSGI:Java模块化之路

    Java可能是近20年来最成功的开发技术,因其具备通用性.高效性.平台移植性和安全性而成为不同硬件平台理想的开发工具.从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java技术 ...

  3. 使用JDK9提供的模块化系统,来定义自己的模块

    JDK9提供的模块化系统 Java模块化系统的背景 模块是什么 模块化的目标 可靠的配置 强封装 增强可扩展性能和可维护性 可定制的运行环境 模块的类型 1.具名模块(Named Module) 2. ...

  4. java 模块化基础

    java 模块化基础 模块化概述 模块化创建 模块信息文件(module-info.java) 服务 模块化概述 JDK8以前的开发模式: java源代码以java文件(类.接口.注解等)形式存在. ...

  5. java11模块化开发_【JDK 11】关于 Java 模块系统,看这一篇就够了

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  6. Java平台模块化系统(JSR 376)通过公开测评复议投票

    Java平台模块化系统(JPMS,Java Platform Module System)亦称为Jigsaw项目或JSR 376.尽管在两个月前JPMS未通过最初的公开评测投票(Public Revi ...

  7. WildFly评估之WildFly的模块化系统

    感谢朋友[吴杰]投递本文. WildFly,前身是JBoss AS,从V8开始为区别于JBoss EAP,更名为WildFly.Wildfly 8主要具备如下特性: Java EE7的参考实现(201 ...

  8. Oracle宣称Java将每半年发布一个版本

    2019独角兽企业重金招聘Python工程师标准>>> Oracle近日宣布,他们将Java的发布频率改为每六个月一次. JCP执行委员会在八月份的会议上提到了这一说法,随后,Ora ...

  9. Java9新特性系列(模块化系统: Jigsaw-Modularity)

    模块化的前时代 Ant时代 相信大家对Ant都不陌生,Ant是任务型的,定义了一系列的任务dir/compile/jar等等,缺点是操作文件 Maven时代 Maven/Gradle相对于Ant,增加 ...

最新文章

  1. java 日期的工具类_java 日期时间工具类
  2. [导入]C++程序随笔
  3. Think in AngularJS :对比 jQuery 和 AngularJS 的不同思维模式
  4. Linux内核分析 - 网络[十]:ARP杂谈
  5. Index of /pub/software/graphics/pngtoico/
  6. Linux中更新java代码命令,java代码执行linux命令
  7. MySQL实习训练1
  8. git文件gitignore修改后不生效
  9. 专访探真科技:云原生安全与业务迭代平衡术
  10. Spring源码学习笔记:起源发展和核心模块主要职能
  11. 《Android 应用案例开发大全(第二版)》——2.3节案例的基本框架
  12. CSS设置文本——行间距
  13. SMART PLC PID算法基本解析(附公式)
  14. NOIP2016 游记
  15. 程序员垃圾简历长什么样?
  16. 精品软件试用及分享 屏幕录像专家注册版 附下载地址
  17. 单片机测试开发板用什么软件,怎么知道单片机开发板的好坏
  18. php清理浏览器缓存文件在哪里,php如何清除浏览器缓存?
  19. 【第104期】游戏策划:如何看待另一半沉迷游戏?
  20. 物联网应用网站——用户手册

热门文章

  1. Ruby的Singleton method
  2. 量子计算机人类意识云,意识上传-人类距离永生还要多久(大脑的工作原理很有可能与量子计算机一致)...
  3. android锁屏流程_Android开机锁屏流程分析
  4. 怎么让电脑运行速度变快_分享几种电脑运行速度慢的解决方法_windows7教程
  5. 【spring】自动装配
  6. group by总结(还有having)
  7. php批量修改文件名
  8. [微信小程序]商城之购买商品数量实现
  9. 微信小程序,对象转换成数组
  10. 架构设计复杂度的6个来源