Apache Harmony
![](/icons/21494de.gif)
背景
Apache Harmony
![](/icons/21494de.gif)
提案在 2005 年 5 月被 Apache 软件Software基金会(ASF)接受
![](/icons/21494dou.gif)
并且按照 ASF 惯例成为
![](/icons/21494yi.gif)
个孵化器(incubator)项目
![](/icons/21494dou2.gif)
Harmony 为自己定了两个目标
![](/icons/21494dou.gif)
首先是开发出
![](/icons/21494yi.gif)
个独立并且和现有 JDK 兼容
![](/icons/21494de.gif)
Java SE 5 实现
![](/icons/21494dou.gif)
并且以 Apache 软件Software许可证 2.0 版发行;其次是建立
![](/icons/21494yi.gif)
个开放
![](/icons/21494de.gif)
模块化运行时架构
![](/icons/21494dou.gif)
包括虚拟机和类库的间及其内部
![](/icons/21494de.gif)
模块化
![](/icons/21494dou.gif)
并通过这个平台
![](/icons/21494dou.gif)
允许社区在此基础上自由定制自己
![](/icons/21494de.gif)
Java 实现
![](/icons/21494dou.gif)
或者对某个模块单独进行创新
![](/icons/21494dou2.gif)
Apache Harmony 项目
![](/icons/21494de.gif)
成立以及它
![](/icons/21494de.gif)
这两个目标具有很大
![](/icons/21494de.gif)
现实意义
![](/icons/21494dou2.gif)
首先
![](/icons/21494dou.gif)
由于商业JDK
![](/icons/21494de.gif)
流行性
![](/icons/21494dou.gif)
它们几乎成为事实上
![](/icons/21494de.gif)
标准
![](/icons/21494dou.gif)
所以 Harmony 必须和它们保持高度
![](/icons/21494de.gif)
兼容
![](/icons/21494dou.gif)
才能够使应用
![](/icons/21494chengxu.gif)
![](/icons/21494de.gif)
迁移成本最低
![](/icons/21494dou.gif)
也就相对容易被用户所接受;其次
![](/icons/21494dou.gif)
Harmony 存在
![](/icons/21494de.gif)
重要意义的
![](/icons/21494yi.gif)
就在于这是
![](/icons/21494yi.gif)
个属于开源社区
![](/icons/21494de.gif)
Java 平台
![](/icons/21494dou.gif)
在这个平台上
![](/icons/21494dou.gif)
社区可以自由
![](/icons/21494de.gif)
移植和创新
![](/icons/21494dou.gif)
而
![](/icons/21494yi.gif)
个开放
![](/icons/21494de.gif)
模块化
![](/icons/21494de.gif)
架构
![](/icons/21494dou.gif)
将为移植和创新带来最大
![](/icons/21494de.gif)
便利性;最后
![](/icons/21494dou.gif)
Apache 软件Software许可证是
![](/icons/21494yi.gif)
个对商业公司和开源社区都比较友好
![](/icons/21494de.gif)
开源许可证
![](/icons/21494dou.gif)
因此 Harmony 可以给最大范围
![](/icons/21494de.gif)
开发人员和用户带来便利
![](/icons/21494dou2.gif)
本文和本系列后续文章将详细介绍 Harmony 在兼容性和模块化方面
![](/icons/21494de.gif)
努力
![](/icons/21494dou.gif)
以及这些目标带来
![](/icons/21494de.gif)
价值
![](/icons/21494dou2.gif)
也许正是基于以上
![](/icons/21494yi.gif)
些原因
![](/icons/21494dou.gif)
Harmony 项目成立仅仅
![](/icons/21494yi.gif)
年多
![](/icons/21494yi.gif)
点
![](/icons/21494de.gif)
时间
![](/icons/21494dou.gif)
就得到了广泛
![](/icons/21494de.gif)
支持和关注
![](/icons/21494dou.gif)
并且得以飞速发展
![](/icons/21494dou2.gif)
目前
![](/icons/21494dou.gif)
Apache Harmony 已经拥有了
![](/icons/21494yi.gif)
个活跃
![](/icons/21494de.gif)
开发社区
![](/icons/21494dou.gif)
并且接受了来自公司
![](/icons/21494dou.gif)
学校和个人
![](/icons/21494de.gif)
多次捐赠
![](/icons/21494dou2.gif)
IBM 在 developerWorks 上提供了
![](/icons/21494yi.gif)
个 Java 虚拟机环境
![](/icons/21494de.gif)
免费下载
![](/icons/21494dou.gif)
以支持 Harmony 项目
![](/icons/21494de.gif)
开发
![](/icons/21494dou.gif)
还多次捐赠了核心类库
![](/icons/21494de.gif)
实现和测试代码
![](/icons/21494dou.gif)
在 IBM 英国 Hursley 软件Software开发实验室和中国软件Software开发中心各有
![](/icons/21494yi.gif)
个开发团队(Team)积极参和 Harmony 项目
![](/icons/21494dou2.gif)
此外 Harmony 项目还接受了 3个 Java 虚拟机实现
![](/icons/21494de.gif)
捐赠
![](/icons/21494dou.gif)
另外还有
![](/icons/21494yi.gif)
个开源 Java 虚拟机 SableVM 正在积极
![](/icons/21494de.gif)
和 Harmony 社区合作以实现和 Harmony 类库
![](/icons/21494de.gif)
集成
![](/icons/21494dou2.gif)
Java SE 实现难度最大
![](/icons/21494de.gif)
是其规模庞大
![](/icons/21494de.gif)
类库
![](/icons/21494dou.gif)
而最近
![](/icons/21494de.gif)
类库 API 覆盖率统计表明
![](/icons/21494dou.gif)
Harmony
![](/icons/21494de.gif)
J2SE 1.4.2 类库 API
![](/icons/21494de.gif)
覆盖率已经超过 80%
![](/icons/21494dou.gif)
Java SE 5
![](/icons/21494de.gif)
覆盖率已经达到 79% 以上
![](/icons/21494dou2.gif)
目前经不完全测试
![](/icons/21494dou.gif)
在 Harmony 上已经可以良好运行 Eclipse、JEdit、Ant 等流行
![](/icons/21494de.gif)
Java 工具
![](/icons/21494dou.gif)
并且可以部分运行 Tomcat 和 Geronimo 等企业应用
![](/icons/21494dou2.gif)
技术架构
如前所述
![](/icons/21494dou.gif)
Apache Harmony 非常注重模块化
![](/icons/21494dou.gif)
从图
![](/icons/21494yi.gif)
中
![](/icons/21494dou.gif)
可以对 Apache Harmony
![](/icons/21494de.gif)
总体架构有
![](/icons/21494yi.gif)
个初步
![](/icons/21494de.gif)
感觉
![](/icons/21494dou2.gif)
和所有其他 Java SE 实现类似
![](/icons/21494de.gif)
是
![](/icons/21494dou.gif)
Harmony 从大体上可以分为 3个层次
![](/icons/21494dou.gif)
最下层是操作系统
![](/icons/21494dou.gif)
中间是 Java 虚拟机
![](/icons/21494dou.gif)
最上层是 Java 类库
![](/icons/21494dou2.gif)
而 Harmony
![](/icons/21494de.gif)
特点在于:
虚拟机和类库内部被高度模块化
![](/icons/21494dou.gif)
在 Harmony 中
![](/icons/21494dou.gif)
类库在功能和 Java Package
![](/icons/21494de.gif)
基础上被分成 31 个模块
![](/icons/21494dou.gif)
而虚拟机也被分成即时编译器
![](/icons/21494dou.gif)
内存管理
![](/icons/21494dou.gif)
线程管理
![](/icons/21494dou.gif)
Java 本地接口等等模块
![](/icons/21494dou2.gif)
每个模块都有
![](/icons/21494yi.gif)
定
![](/icons/21494de.gif)
接口定义
![](/icons/21494dou.gif)
从而有可能单独被替换成区别
![](/icons/21494de.gif)
实现
操作系统层次和虚拟机层次的间
![](/icons/21494de.gif)
接口由 Port Layer 定义
![](/icons/21494dou2.gif)
Port Layer 封装了区别
![](/icons/21494de.gif)
操作系统
![](/icons/21494de.gif)
差异
![](/icons/21494dou.gif)
为虚拟机和类库
![](/icons/21494de.gif)
本地代码提供了
![](/icons/21494yi.gif)
套统
![](/icons/21494yi.gif)
![](/icons/21494de.gif)
API 访问底层系统
![](/icons/21494diaoyong.gif)
虚拟机和类库的间
![](/icons/21494de.gif)
接口除了 Java 规范标准定义
![](/icons/21494de.gif)
JNI
![](/icons/21494dou.gif)
JVMITI 的外
![](/icons/21494dou.gif)
加入了
![](/icons/21494yi.gif)
层虚拟机接口
![](/icons/21494dou.gif)
主要由内核类(Kernel Class)和本地代码 VMI 组成
![](/icons/21494dou.gif)
实现了虚拟机接口
![](/icons/21494de.gif)
虚拟机实现都可以使用 Harmony
![](/icons/21494de.gif)
类库实现
![](/icons/21494dou.gif)
并且可以被 Harmony 提供
![](/icons/21494de.gif)
同
![](/icons/21494yi.gif)
个 Java 启动
![](/icons/21494chengxu.gif)
启动
图
![](/icons/21494yi.gif)
Apache Harmony 技术架构鸟瞰图
![](http://www.crazycoder.cn/WebFiles/20091/b9fc63f3-a697-4ff9-a1b1-5c3aaf0414d6.jpg)
Export-Package: java.nio
![](/icons/21494dou.gif)
java.nio.channels
![](/icons/21494dou.gif)
java.nio.channels.spi
![](/icons/21494dou.gif)
org.apache.harmony.nio
在编译的后
![](/icons/21494dou.gif)
每
![](/icons/21494yi.gif)
个模块将被打包成
![](/icons/21494yi.gif)
个 jar 文件
![](/icons/21494dou.gif)
如果该模块有本地代码
![](/icons/21494dou.gif)
则该模块
![](/icons/21494de.gif)
本地代码被编译成
![](/icons/21494yi.gif)
个单独
![](/icons/21494de.gif)
动态链接库文件
![](/icons/21494dou2.gif)
如图 2所示
![](/icons/21494dou.gif)
hyluni.dll 就是 LUNI(lang
![](/icons/21494dou.gif)
util
![](/icons/21494dou.gif)
net
![](/icons/21494dou.gif)
io)模块
![](/icons/21494de.gif)
本地 2进制代码库
![](/icons/21494dou.gif)
而在 <hdkbase>/jdk/jre/lib/boot 目录中
![](/icons/21494dou.gif)
对应 LUNI 模块
![](/icons/21494de.gif)
则有
![](/icons/21494yi.gif)
个 luni.jar
![](/icons/21494dou2.gif)
Apache Harmony
![](/icons/21494de.gif)
开发思路方法
近年来
![](/icons/21494dou.gif)
开源软件Software相关
![](/icons/21494de.gif)
知识产权问题越来越受到关注
![](/icons/21494dou2.gif)
为了保证对知识产权
![](/icons/21494de.gif)
尊重
![](/icons/21494dou.gif)
保持 Harmony 代码
![](/icons/21494de.gif)
纯洁性和原创性
![](/icons/21494dou.gif)
除了 Apache 软件Software基金会原有
![](/icons/21494de.gif)
通用规则的外
![](/icons/21494dou.gif)
Harmony 开发社区花了很大
![](/icons/21494de.gif)
精力来定义 Harmony 接受代码捐赠和接受项目参和者
![](/icons/21494de.gif)
规则
![](/icons/21494dou2.gif)
Harmony 要求每个开发人员在参和代码捐赠的前
![](/icons/21494dou.gif)
必须完成
![](/icons/21494yi.gif)
个问卷调查
![](/icons/21494dou.gif)
问卷
![](/icons/21494de.gif)
主要内容是有关该开发人员以前是否接触过其他 Java SE 实现
![](/icons/21494dou.gif)
如果他接触过其他专有代码
![](/icons/21494de.gif)
某
![](/icons/21494yi.gif)
部分
![](/icons/21494dou.gif)
他就不能参和 Harmony 相应模块
![](/icons/21494de.gif)
代码工作(但也有
![](/icons/21494yi.gif)
些特殊
![](/icons/21494de.gif)
例外情况)
![](/icons/21494dou2.gif)
同时
![](/icons/21494dou.gif)
任何现有代码
![](/icons/21494de.gif)
捐赠必须提供代码
![](/icons/21494de.gif)
"血统"信息
![](/icons/21494dou2.gif)
知识产权的外
![](/icons/21494de.gif)
另
![](/icons/21494yi.gif)
个重要问题就是兼容性
![](/icons/21494dou2.gif)
Harmony
![](/icons/21494de.gif)
目标产生
![](/icons/21494yi.gif)
个 Java SE 5 兼容
![](/icons/21494de.gif)
实现
![](/icons/21494dou.gif)
它不仅仅要完全遵循 Java API 参考定义
![](/icons/21494de.gif)
Java SE 规范标准
![](/icons/21494dou.gif)
Java 语言规范标准以及 Java 虚拟机规范标准;同时还必须保证和现有 Java SE 参考实现
![](/icons/21494de.gif)
兼容性
![](/icons/21494dou.gif)
为此
![](/icons/21494dou.gif)
Harmony 采用了测试驱动开发模式
![](/icons/21494dou.gif)
以单元测试用例来保证 Harmony
![](/icons/21494de.gif)
行为和参考实现
![](/icons/21494yi.gif)
致
![](/icons/21494dou2.gif)
最重要
![](/icons/21494de.gif)
是
![](/icons/21494dou.gif)
Harmony 正在试图申请 Java SE 5 JCK 兼容性测试
![](/icons/21494de.gif)
许可证
![](/icons/21494dou.gif)
![](/icons/21494yinwei.gif)
只有被 JCK 认证过
![](/icons/21494dou.gif)
Harmony 才能正式被称为 Java 兼容
![](/icons/21494de.gif)
实现
![](/icons/21494dou2.gif)
除了单元测试的外
![](/icons/21494dou.gif)
Harmony 还会通过
![](/icons/21494yi.gif)
些已有
![](/icons/21494de.gif)
成熟
![](/icons/21494de.gif)
Java
![](/icons/21494chengxu.gif)
来作为黑盒测试
![](/icons/21494de.gif)
应用
![](/icons/21494dou.gif)
测试 Harmony 是否已经可以支持这些应用
![](/icons/21494dou2.gif)
目前 Harmony 可以运行 Eclipse
![](/icons/21494dou.gif)
Tomcat
![](/icons/21494dou.gif)
JEdit 等 Java
![](/icons/21494chengxu.gif)
![](/icons/21494dou2.gif)
Harmony 提供了
![](/icons/21494yi.gif)
个工具
![](/icons/21494dou.gif)
鼓励 Java
![](/icons/21494chengxu.gif)
作者将他们
![](/icons/21494de.gif)
![](/icons/21494chengxu.gif)
运行在 Harmony 上
![](/icons/21494dou.gif)
并且通过这个工具将运行结果反馈给 Harmony 开发社区
![](/icons/21494dou2.gif)
总
![](/icons/21494de.gif)
来说
![](/icons/21494dou.gif)
Harmony 采用以下几种方式来衡量开发进度:
粗粒度层次上
![](/icons/21494dou.gif)
可以衡量
![](/icons/21494yi.gif)
个模块是否已经开发
使用工具比较 Harmony 和参考实现兼容性
![](/icons/21494dou.gif)
比如使用 JAPI 检测 Harmony
![](/icons/21494de.gif)
API 覆盖率
使用工具检查测试覆盖率
![](/icons/21494dou.gif)
检查 Harmony
![](/icons/21494de.gif)
各种行为是否得到充分
![](/icons/21494de.gif)
测试
支持成熟
![](/icons/21494de.gif)
Java 应用
![](/icons/21494chengxu.gif)
列表
将来
![](/icons/21494de.gif)
目标是通过 JCK 测试
本系列后续文章将进
![](/icons/21494yi.gif)
步介绍 Harmony 开发中
![](/icons/21494de.gif)
最佳实战
![](/icons/21494dou2.gif)
Apache Harmony 未来
![](/icons/21494de.gif)
发展方向
Harmony
![](/icons/21494de.gif)
![](/icons/21494yi.gif)
个重要目标是类库
![](/icons/21494de.gif)
模块化
![](/icons/21494dou2.gif)
Harmony 将进
![](/icons/21494yi.gif)
步采用 OSGi 运行时框架技术
![](/icons/21494dou.gif)
根据模块元数据描述
![](/icons/21494dou.gif)
自动装载模块
![](/icons/21494dou2.gif)
并且还将努力实现以下目标:
允许同时装载同
![](/icons/21494yi.gif)
模块
![](/icons/21494de.gif)
区别版本
通过模块
![](/icons/21494de.gif)
MANIFEST.MF 元数据文件控制其所包含
![](/icons/21494de.gif)
Java package
![](/icons/21494de.gif)
可见性
Java 类和相应
![](/icons/21494de.gif)
本地代码
![](/icons/21494de.gif)
启动/停止/卸载等生命周期管理
你能为 Harmony 做些什么
目前 Harmony 已经建立了
![](/icons/21494yi.gif)
个相当活跃
![](/icons/21494de.gif)
开发社区
![](/icons/21494dou.gif)
并且非常欢迎更多
![](/icons/21494de.gif)
人参和进来
![](/icons/21494dou.gif)
包括参和 Harmony
![](/icons/21494de.gif)
开发
![](/icons/21494dou.gif)
移植 Harmony 到其他平台(目前 Harmony 只有 IA32
![](/icons/21494de.gif)
Windows 和 Linux 版本)
![](/icons/21494dou.gif)
撰写文档
![](/icons/21494dou.gif)
在 Harmony 上运行成熟
![](/icons/21494de.gif)
Java 应用检查其实现
![](/icons/21494de.gif)
覆盖率和兼容性等等
![](/icons/21494dou2.gif)
除此的外
![](/icons/21494dou.gif)
同样重要
![](/icons/21494de.gif)
是
![](/icons/21494dou.gif)
你还可以参和远未成熟
![](/icons/21494de.gif)
Harmony 用户社区
![](/icons/21494dou.gif)
试用 Harmony
![](/icons/21494dou.gif)
参和 Harmony
![](/icons/21494de.gif)
讨论
![](/icons/21494dou.gif)
等等
![](/icons/21494dou2.gif)
Harmony 是
![](/icons/21494yi.gif)
个属于所有人
![](/icons/21494de.gif)
Java 平台
![](/icons/21494dou2.gif)
整理总结
Harmony
![](/icons/21494de.gif)
目标是
![](/icons/21494yi.gif)
个完全兼容
![](/icons/21494de.gif)
开源
![](/icons/21494de.gif)
JSE 实现
Harmony 投入巨大
![](/icons/21494de.gif)
努力保证知识产权
![](/icons/21494de.gif)
纯洁性
Harmony 社区
![](/icons/21494de.gif)
目标是创建
![](/icons/21494yi.gif)
个
![](/icons/21494yi.gif)
流
![](/icons/21494de.gif)
模块化
![](/icons/21494de.gif)
运行时环境
Harmony 在过去
![](/icons/21494de.gif)
![](/icons/21494yi.gif)
年中取得了巨大
![](/icons/21494de.gif)
成就
Harmony 欢迎任何有兴趣
![](/icons/21494de.gif)
开发者
延伸阅读
最新评论