java.com'>Java 7有三个主要目标。首先是通过Jigsaw项目模块化java.com'>Java平台。第二是通过invokeDynamic指令和达芬奇机项目将JVM发展为多语言平台,第三是通过项目Coin来解决java.com'>Java程序员面对的一些常见生产效率问题。 内容来自dedecms
将java.com'>Java平台模块化带来了许多好处:通过消除JDK里众多类之间日益增长的相互依赖而改善了性能;由于允许下载JDK的子集而不是一次下载整个平台,减少了下载量;允许在内存有限的设备如嵌入式控制器上安装JRE的一个子集。 本文来自织梦
Sun公司正在采取双管齐下的办法来构建JDK7的模块化特性:JSR 294和Jigsaw。JSR 294的主要目的是提高编译时和运行时环境之间的逼真度(fidelity)。这将增加语言功能来支持java.com'>Java的模块系统,并更新目前需要类路径信息的重要组成部分,如javac和JVM本身。JSR 294最终将取消类路径。因为它独立于Jigsaw ,所以也可用于其他模块化系统,如OSGi ,甚至可以用于其他处理依赖关系的工具如谷歌的Guice或未来版本的JSR 299(java.com'>Java的上下文和依赖注入) 。
Jigsaw将使用给JSR 294开发的部分特性,为Sun的JDK7实现构建模块系统。它是Sun JVM的一个实现细节 ,不会成为JSR的一个标准,而且技术上也不属于java.com'>Java SE 。令人惊讶的是,Jigsaw与它打算取代的类路径,尽管是java.com'>Java主机系统的事实标准,但都不属于java.com'>Java语言规范。Sun已经创建了OpenJDK的一个开源子项目 ,也称为Jigsaw。该子项目将拥有JSR 294参考实现以及Jigsaw模块系统的设计与实现。
内容来自dedecms
Alex Buckley在今年的java.com'>JavaOne大会演讲上提供了一些JSR 294和Jigsaw如何工作的技术细节。其主要特征是引入了一个标准模块信息接口,java.com'>Java程序可以使用它来指定依赖和其他细节。详细信息包括模块id,应用程序的主类,程序提供的模块和所依赖的模块。详细信息中还可包括版本信息(可选的),这会让Sun和开发者在将来易于修改已经被广泛使用的类库和API。一个来自Buckley的幻灯片的例子:
module org.planetjdk.aggregator @ 1.0 {
system jigsaw;
requires module jdom @ 1.*;
requires module tagsoup @ 1.2.*;
requires module rome @ =1.0;
requires module rome-fetcher @ =1.0;
requires module joda-time @ [1.6,2.0);
requires module java-xml @ 7.*;
requires module java-base @ 7.*;
class org.planetjdk.aggregator.Main;
}
copyright dedecms
使用此模块信息,Jigsaw的打包工具(jpkg)能够创建一个映射部署文件,可以根据不同的平台而变化而且更紧密的与平台的能力相结合。这样Jigsaw将使得java.com'>Java桌面应用在sun支持的各个平台上更加接近一等公民, 这是Sun振兴桌面java.com'>Java所做努力的一个关键步骤。Mark Reinhold在java.com'>JavaOne会议上演示了Jigsaw目前的一些能力,使用Linux的Synaptic Package Manager为一个简单的应用逐步建立需求,从一个基础的java.com'>Java模块开始逐步增加额外的模块,如AWT和Swing 。 内容来自dedecms
Sun决定兴建Jigsaw而不是使用现有的模块系统例如OSGi是非常有争议的, Sun并没有清楚的阐明为什么它已决定走这条路。在最近java.com'>Java Posse的一个podcast中,Mark Reinhold和Alex Buckley也提供了一些关于两者分歧的技术细节,阐明了为什么Sun公司决定建立自己的系统。除了如同OSGi那样将打包的应用更多的绑定于平台之上,两个系统的依赖模型是不同的。Sun公司需要能够将包劈成不同的模块并将在运行时把它们加载到相同的类加载器中——例如java.util包可能被劈成不同的模块(甚至对有内存限制的装置有不同的实现)。为了支持这一特性Jigsaw有一个本地依赖的概念,该概念是递归的。所以,如果模块‘Swing’对于AWT有本地依赖而模块‘AWT’对于模块‘base’有一个本地依赖 ,那么在运行时模块Swing、AWT和base都将在同一类装载器中加载。虽然在OSG中的片段(frament)也是类似的概念,但不够更灵活,片段自己无法表达依赖性。
本文来自织梦
企业专家小组联席主席Eric Newcomer对此仍持怀疑态度。在最近的博客中,他把Jigsaw描述为“Sun重新发明OSGi的最新尝试,或在任何情况下阻挠OSGi或者建立他们能控制的OSGi替代品”,他继续写道: 织梦内容管理系统
“我今年没有参加java.com'>JavaOne大会,所以可能由于我没有亲临而有错误的印象,但我的理解是,项目Jigsaw没有提到OSGi 。java.com'>Java 7的计划说明也没有提到。因此,对于Jigsaw项目是否是对java.com'>Java模块化的一个威胁这个问题,我的答案是,是的。”







