写点什么

标准 Java 模块系统的需求

  • 2011-06-12
  • 本文字数:1564 字

    阅读完需:约 5 分钟

Mark Reinhold 前些天公布了 Java 模块化的第一份公开草案。正如 Mark 在有关这个问题的博客里说的,这次关于 Java 模块化的讨论和先前的 JSR294 迭代有所不同,这次讨论不是 Sun/Oracle 关起门来进行的,而是引入了参与 OpenJDK 的其他成员,比如 IBM,还有 Java SE 和 Java EE 社区的其他成员。

由于这只是一份草案,有些问题仍然需要商讨,但它已经对什么是 Java 模块化进行了统一的定义。有 IBM 的参与,这份草案比以往更加关注与 OSGi 之间的互操作性。

有个比较有意思的需求是,即便 ServiceLoader ResourceBundle 在 Java 模块化里的表现并不尽如人意,但模块化还是想基于这两部分内容构建,以便那些想用标准模式的开发人员不用关注细节就可以利用模块化。目前, ServiceLoader 在处理多个类加载器的时候还有问题

让 JVM 模块化的主要目的之一是对 JVM 库进行分割,JVM 库这些年已经增长到了几十兆。(不处理模块化概念的 Scala 也已经有十兆了)。不过 JVM 库里所有的类都在同一个类加载器里;而 OSGi 是每个 Bundle 有一个类加载器,这就不能进行直接的映射。(OSGi 有片段的概念,片段能把自己写到父类加载器里去)。文档里有一部分需求定义到,要支持有单独类加载器的模块系统和提供多个类加载器方法的模块系统。

文档里有些描述还比较模糊。比如说,要求版本完全有序,但似乎还没有像 Semantic Versioning 这样一致的版本化方法。此外,文档要求严格定义元数据(版本号是其中一部分),而版本的概念还有待商榷。

另一个悬而未决的问题是,模块信息是否应该像编译好的Java 代码或可声明的外部库那样使用。OSGi 利用已有的MANIFEST.MF 文件处理编码依赖,先前的Jigsaw 实现则编译一个Java 类文件,允许通过库进行内省。这对Java 变种有一个不利影响,就是Mirah 或JRuby 等非Java 语言使用模块系统会更加困难。

这个需求貌似还有较大争议。虽然JRuby 的领导者Charles Nutter 说他还没来得及阅读完整的规范,但他在 Reinhold 的博客里评论说

Jigsaw 模块化系统要求有一个可能包含注解的.class 文件,因此也没必要限制参与语言: - 发布前要先编译成 JVM 字节码

  • 支持全部的 Java 语言结构,比如源码级的注解

换句话说,JRuby、JavaScript(Rhino)、各个版本的 Smalltalk、Python(Rhino)及其它几种语言会立即被排除在外了。

提案还谈到了通用打包系统(比如 rpm 和 easy_install),借助这类系统可以把 Java 运行时传递给其他系统和已在网络上发布的工件。和模块化相比,对这部分的论述要稍微深入一点儿。

这份提案虽然尚未完成、还有待解决的问题,但已经收到了一些积极的反馈

文档里还有很多很多好的需求,这些需求要是都能以开放和兼容的方式实现,Java 一定会从中获益。

另一个好处是,一旦模块化成为 Java SE 8 的一部分,向 OSGi 转会比现在容易得多。现在要想把已有系统往 OSGi 上迁移,最大的障碍往往是系统的模块化,因为系统最初就不是以模块的方式构建的。这不是 OSGi 本身的问题,而是模块化概念的问题。你要是有非模块化的代码,就很难对它们进行模块化。在 Java SE 8 里,这个问题会在开发周期的更早期出现,这有助于开发人员从一开始就用模块的方式去设计系统。如果基本的 JVM 模块系统不能满足你的需求,你可以把已有的 Java SE 8 模块转到 OSGi 上,这些模块还会按原来的样子运行,所以迁移变得轻而易举。然后你就可以利用 OSGi 的优势对模块进行增强了(见下文)。

Java 的模块化可能会使 OSGi-lite 模式成为现实,会鼓励 Java 库的开发人员使用模块元数据对他们的运行时进行注解,而这些元数据都能被 OSGi 运行时使用。在任何情况下,就算有一些已知的分歧,只要用一种兼容而合理的方式前进,对所有 Java(和基于 Java)的开发人员就都有好处。

你怎么看提出的这些模块化需求呢?

查看英文原文: Requirements of a Standard Java Module System

2011-06-12 18:412576
用户头像

发布了 151 篇内容, 共 61.8 次阅读, 收获喜欢 18 次。

关注

评论

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

探索AC自动机:多关键词搜索的原理与应用案例

京东科技开发者

【首席战略官分享】工作数字化的中国历程 | 从 OA 到 BPM 到数字流程自动化

望繁信科技

数字化转型 流程挖掘 流程智能

Flutter开发App获得新的组合思路(小程序+App)

Geek_2305a8

“大模型”热潮下,企业数智化如何落地?

人称T客

极石汽车:找准细分市场定位,加速完成品牌进阶

Geek_2d6073

关于 Git 的6大提示和技巧

秃头小帅oi

穿透人效本质,盖雅工场发布人效数字化套件

ToB行业头条

使用 SpanMetrics Connector 将 OpenTelemetry 跟踪转换为指标

巴辉特

可观测性 OpenTelemetry

京东搜索重排:基于互信息的用户偏好导向模型

京东科技开发者

淘宝商品详情数据的高效获取与多元应用

Noah

《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件

EquatorCoco

前端 网站

湖南贝特新能源科技:巧用草料二维码,实现设备管理数字化

草料二维码

OpenSea/NFT平台项目系统开发搭建技术分析

V\TG【ch3nguang】

《2024快应用智慧服务生态白皮书》发布,探索AI与快应用融合之路

科技热闻

优化系统性能:深入探讨Web层缓存与Redis应用的挑战与对策

不在线第一只蜗牛

redis 缓存 Web

低代码革命:JNPF平台如何简化企业应用开发

EquatorCoco

低代码

《AIGC应用实战营》课程学习总结

江流

十五张图带你快速入门 shardingsphere-proxy

EquatorCoco

架构 算法 教程

“前端”工匠系列(一):合格的工匠,究竟该搞什么

京东科技开发者

奥运项目背后的智能制造世界:如何助力赛场的每一次超越?

Altair RapidMiner

人工智能 机器学习 数据分析 仿真 altair

如何利用淘宝商品评论API返回值提升商品转化率

技术冰糖葫芦

API Explorer API 测试 API 策略 pinduoduo API

商品详情API返回值中的商品重量与体积信息

技术冰糖葫芦

API Explorer API 测试 API 策略 pinduoduo API

共筑运维稳定磐石!华为云“数智先锋100·企业运维稳定性治理研讨会”南京站成功举办

科技热闻

Web3 游戏周报(8.18 - 8.24)

Footprint Analytics

链游

FinClip提供微信授权登录的三种方案解析

Geek_2305a8

亚信安慧AntDB数据库ACP认证培训

亚信AntDB数据库

AntDB

什么是数据库 DevOps?

高端章鱼哥

SpringBoot 整合线程池

快乐非自愿限量之名

Java Spring Boot 后端

心辰 Lingo 语音 AI 模型开放内测预约;Meta Sapiens 模型让 AI 分析图像中人类动作丨 RTE 开发者日报

声网

NFTScan | 08.19~08.25 NFT 市场热点汇总

NFT Research

NFT NFTScan

降低游戏直播软件开发风险:自建团队、外包公司与现成源码

软件开发-梦幻运营部

标准Java模块系统的需求_Java_Alex Blewitt_InfoQ精选文章