OpenJDK:JDK开源实现

 

openjdk

OpenJDK(开放Java工具集)是一个免费开源的Java SE实现。最初在2006年由Sun微系统公司发起。实现基于GNU GPL协议(附带例外条款)实现。除了例外条款中的情况,与Java class开发库相关的组件都必须遵守GPL协议发布。自JDK 7开始,OpenJDK已经成为了Java SE 的官方参考实现。

常见问题

完整的问题列表请参见FAQ

谁在使用OpenJDK?

主流Linux发布版本都将OpenJDK作为默认Java SE实现,包括Ubuntu、Fedora或Red Hat企业版。除此以外,2010年的Eclipse社区的调查表明,大多数Java开发者使用Oracle发布的商业版本JDK,21%受调查的开发者使用OpenJDK。最后要强调的是,许多学术机构发布的研究都参考或基于OpenJDK。

谁在参与OpenJDK开发?

大多数OpenJDK贡献者都是来自Oracle从事OpenJDK开发的软件工程师。此外,还有OpenJDK社区的优秀学者、开源操作系统开发者以及解决具体问题的独立软件开发者。Oracle对目前这样的贡献者模型很满意,欢迎新鲜血液加入。想了解如何成为OpenJDK贡献者?请参见这里

Oracle为什么要参与OpenJDK开发?

Oracle致力于采用开源方式开发JDK基础代码。这种方式可以降低参与基础代码开发的门槛,用最好的想法来改进技术融入到基础代码中。

如何验证我的OpenJDK实现与Java SE兼容?

要验证实现与Java SE规范的兼容性,需要向Oracle申请获得兼容性测试集(TCK)的访问权限。Oracle为Java SE TCK提供了各种商业和非商业协议。如果你的JDK实现满足OpenJDK社区TCK协议的条件,可以在遵守协议的情况下申请JCK访问。

下载与安装

JDK 8

Debian、Ubuntu等

在命令行输入:

openjdk-8-jre 仅包含Java运行时环境。如果要开发Java程序,请安装 openjdk-8-jdk

Fedora、Oracle Linux、Red Hat企业版等

在命令行输入:

java-1.8.0-openjdk 仅包含Java运行时环境。如果要开发Java程序,请安装 java-1.8.0-openjdk-devel

JDK 7

Debian、Ubuntu等

在命令行输入:

openjdk-7-jre 仅包含Java运行时环境。如果要开发Java程序,请安装 openjdk-7-jdk package。

Fedora、Oracle Linux、Red Hat企业版等

在命令行输入:

java-1.7.0-openjdk 仅包含Java运行时环境。如果要开发Java程序,请安装 java-1.7.0-openjdk-devel

JDK 6

Debian、Ubuntu等

在命令行输入:

openjdk-6-jre package 仅包含Java运行时环境。如果要开发Java程序,请安装 openjdk-6-jdk

Fedora、Oracle Linux、Red Hat企业版等

在命令行输入:

java-1.6.0-openjdk 仅包含Java运行时环境。如果要开发Java程序,请安装 java-1.6.0-openjdk-devel 。

源代码

源代码项目结构及下载。

下面会介绍OpenJDK仓库术语及命名规则。此外还给出了从OpenJDK仓库(http://hg.openjdk.java.net/)下载代码的简要说明。

注意:除了上面的仓库,你也可以从其他地方下载完整的JDK代码,比如JDK中的 src.zip。然而,OpenJDK必须从OpenJDK Mercurial仓库 下载,其他地方获取的源代码可能因为许可证的关系包含了过时的代码。

类似创建变更集(create changeset)、合并(merge)、推送(push)这样频繁执行的操作在 生成变更集 中有详细描述。

这里假定大家对 Mercurial终极指南 的前两章内容已经非常熟悉。

术语及命名规则

OpenJDK 所有项目的代码都存储在Mercurial仓库,里面包含了源代码及变更记录。一些项目将自己的代码分为多个关联的Mercurial仓库存储。例如,JDK 9 将整个JDK分成了不同组件,存储到一系列不同的仓库里。基于JDK的项目,比如 IcedTea 和 Jigsaw 也采用了这种模式。相反地,Code Tools 将每个工具存储在不相关的独立仓库。Graal 用一个仓库存储所有代码。不论项目存储代码的模式如何,每个 贡献者 只要将自己需要修改的代码从对应的仓库克隆出来即可。

请参照项目文档或邮件列表了解需要访问哪个仓库、开发规范和辅助工具。

下面是一个典型的开发模式示例:

devModel

 

贡献者从OpenJDK Mercurial服务器中有读写权限的仓库(“jdk9/dev”)创建一个 clone (名为“9dev”的本地拷贝)。在这个本地拷贝上进行自己的修改,然后 commit 一个变更集。在变更集验证通过后,可以直接从本地 push 或者发给有 push 权限的提交者让他push到服务器。完成后,大家都能够看到这次修改的内容。

2014年3月,Mercurial服务器升级后,取消了 gate仓库 用法。

仓库的命名规则如下:

这里

project :: OpenJDK Project 项目名的缩写,比如“jdk9”、“openjfx”、“sumatra”
component_path :: 代码所在的路径,由项目负责人指定

安装配置Mercurial

Mercurial是一个免费、跨平台的分布式源码管理工具。在这里可以找到 Mercurial 相关的软件。OpenJDK 推荐安装 Mercurial 2.6.3(或更新版本)。安装 Mercurial 后就可以克隆源代码仓库。贡献者提交更改内容时需要按照下面进行额外的配置。

一些项目需要额外的工具或脚本操作代码仓库进行开发。例如,在 JDK 9 中,common/bin/hgforest.sh 脚本可以用来对项目中所有仓库执行命令。OpenJDK 开发者常用的扩展有 checktrees 和 Mercurial Queues(mq)。请注意,OpenJDK Mercurial 服务器默认启用 trees 功能。

创建并编辑 ~/.hgrc 文件,至少包含以下内容:

openjdk_username 是一个12字符以内的小写字母和数字组合(不是email地址)。第一个字符要求是字母。username 会显示在 Mercurial 变更日志中。它被用来验证提交修改的是项目的作者,提交变更的人具备提交者资格。建议 openjdk_username 采用作者的全名,比如用作者名字的首字母加上作者的姓氏。请参考项目页面中如何成为作者部分了解更多信息。

在 OpenJDK people 可以找到所有按字母排序的 openjdk_usernamesCensus 展示了OpenJDK社区的组织结构。

验证配置

安装配置好Mercurial后,还需要按照下列步骤验证配置。

  1. 验证Mercurial版本,是否为2.6.3(或更新版)
  2. 验证已启用的扩展,包括 fetch 和 mq。
  3. 验证 ~/.hgrc 配置文件是否正确。至少应包括以下内容:

到这里,可以开始从仓库获取下面源代码。

克隆

使用Mercurial,每个开发者都在仓库的一个克隆版本上进行开发,该版本是克隆执行时仓库的一个镜像。要更新克隆版本的内容,请参见创建变更集

Sandbox仓库

创了项目仓库,还有很多测试仓库可以用来在Mercurial上运行测试命令。不必担心对开发中的代码造成任何问题。在自由使用的同时请注意,测试仓库的内容可能随时会被删除。

项目集合(森林)

如果项目采用集合方式,强烈推荐开发者克隆整个集合。这么做可以保证构建时的一致性。下面的例子展示了如何克隆整个 jdk9/dev 项目集合的源代码到 9dev 目录。

  1. 使用 trees 扩展,执行 tclone:
  2. 使用 get_source.sh 克隆整个项目集合。首先克隆主项目树:

    然后克隆项目集合中的所有仓库:

无需关心克隆的细节,下面是克隆完成的结果。

单个仓库

如果项目源代码包含在单个仓库,或者你也只打算下载该部分的代码进行学习,那么可以直接克隆单个仓库(即使它可能是项目集合的一部分)。例如,下面的例子展示了如何从 jdk9/dev 项目中克隆 langtools 仓库。

BSD移植

对DragonFly BSD、FreeBSD、Mac OS X、NetBSD 和 OpenBSD BSD移植,请参见BSD移植项目wiki页面

开发资源

文档

源代码

小组

项目

工具

协议

OpenJDK发布协议?

所有虚拟机遵循 GPL v2 发布,对所有类开发库以及提供公用API的 Classpath异常 遵循GPL v2 +协议。

如何知道OpenJDK中的代码采用了哪个协议?

每个源代码文件都采用了单独的协议——可以查看代码文件开头的版权信息,了解这段代码采用了哪种协议。

官方网站:http://openjdk.java.net/
开源地址:http://hg.openjdk.java.net/

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

1 收藏

资源整理者简介:唐尤华

做自己喜欢的,编程、喝茶、看世界 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer