Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 842|回复: 0

标准Java模块系统的需求

[复制链接]

该用户从未签到

发表于 2011-8-3 23:22:38 | 显示全部楼层 |阅读模式
Mark Reinhold前些天公布了java模块化的第一份公开草案。正如Mark在有关这个问题的博客里说的,这次关于Java模块化的讨论和先前的JSR294迭代有所不同,这次讨论不是Sun/Oracle关起门来进行的,而是引入了参与OpenJDK的其他成员,比如IBM,还有Java SE和Java EE社区的其他成员。
由于这只是一份草案,有些问题仍然需要商讨,但它已经对什么是Java模块化进行了统一的定义。有IBM的参与,这份草案比以往更加关注与OSGi之间的互操作性。
        有个比较有意思的需求是,即便ServiceLoaderResourceBundle在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的博客里评论说
[blockquote]Jigsaw模块化系统要求有一个可能包含注解的.class文件,因此也没必要限制参与语言:
    [li]发布前要先编译成JVM字节码 [li]支持全部的Java语言结构,比如源码级的注解[/li]
换句话说,JRuby、JavaScript(Rhino)、各个版本的Smalltalk、python(Rhino)及其它几种语言会立即被排除在外了。
[/blockquote]提案还谈到了通用打包系统(比如rpm和easy_install),借助这类系统可以把Java运行时传递给其他系统和已在网络上发布的工件。和模块化相比,对这部分的论述要稍微深入一点儿。
这份提案虽然尚未完成、还有待解决的问题,但已经收到了一些积极的反馈
[blockquote]文档里还有很多很多好的需求,这些需求要是都能以开放和兼容的方式实现,Java一定会从中获益。
另一个好处是,一旦模块化成为Java SE 8的一部分,向OSGi转会比现在容易得多。现在要想把已有系统往OSGi上迁移,最大的障碍往往是系统的模块化,因为系统最初就不是以模块的方式构建的。这不是OSGi本身的问题,而是模块化概念的问题。你要是有非模块化的代码,就很难对它们进行模块化。在Java SE 8里,这个问题会在开发周期的更早期出现,这有助于开发人员从一开始就用模块的方式去设计系统。如果基本的JVM模块系统不能满足你的需求,你可以把已有的Java SE 8模块转到OSGi上,这些模块还会按原来的样子运行,所以迁移变得轻而易举。然后你就可以利用OSGi的优势对模块进行增强了。
Java的模块化可能会使OSGi-lite模式成为现实,会鼓励Java库的开发人员使用模块元数据对他们的运行时进行注解,而这些元数据都能被OSGi运行时使用。在任何情况下,就算有一些已知的分歧,只要用一种兼容而合理的方式前进,对所有Java(和基于Java)的开发人员就都有好处。
[/blockquote]你怎么看提出的这些模块化需求呢?
查看英文原文:Requirements of a Standard Java Module System
回复

使用道具 举报

该用户从未签到

发表于 2011-8-4 21:18:05 | 显示全部楼层
谢谢楼主分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 02:57 , Processed in 0.307922 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表