OpenJDK:构建JDK

编者注:在这一期的 开源之路 中,作者和 Cafe Au Lait 的创始人 Elliotte Rusty Harold 接管了目前的 Java SE 7 开发系列文章。因为 OpenJDK 项目 的目标和流程已经在 第一期 介绍过,所以 Elliotte 将在此教程中直接介绍 JDK 7 的实际构建。

在此之前, 如果 OpenJDK 项目有更新,我们会将其发布在每期“开源之路”的开始部分。最新的 发行版 是 b23,发行日期是 10 月 30 日。此发行版解决了一小部分缺陷和功能要求,这些内容可详见其 发行说明,其中许多都与管理问题相关,比如顶层 README 文件、空格清理和遗留 "j2se" 引用的移除。上一个版本 b22 解决的问题比较多,集成了 65 个缺陷修复和 14 个功能,其中包括 将 CORBA、JAXP 和 JAXWS 分割到各自的工作区中,将 Swing ThreadPool 创建 替换为 java.util.concurrent 功能,支持各种时间区更改,以及 OpenJDK RenderingEngine 插件的创建,这意味着“为 Open JDK 提供了替代 Ductus 库的起点。”

但如何达到所有这些新目标呢?这正是 Elliotte 将在在本文中阐述的内容,他将介绍如何从源码构建 JDK。

由于 Sun 的 Java 开发工具包是自由软件(只需在替换的过程中对一些小组件建模),因此我们不妨对经进行一些修改。无论您的激情在于优化、实验、语言设计、调试还是文档,都有大量的工作需要您来做,都有大量的机会提供给各种技能水平的开发人员。在本系列的后续文章中,我将详述 Java 7 或更高版本中可能出现的各种 API 开发。但是,要玩转这些 API,您将需要浴血奋战,所以立即甩掉您的急救箱,撕掉止血带,准备流一些血吧!我们要开始构建 JDK 了。

系统需求

首先,构建 JDK 需要一个受支持的操作系统。这包括 Linux、Solaris、Windows XP 和 Windows Vista。不支持 Mac OS X。Apple 负责将 JDK 迁移至 Mac 中,然而,这往往滞后于潮流。但是,Mac 用户可以使用 Parallels、VMWare Fusion 或 Boot Camp 来运行 Windows 或 Linux,并在其中构建 JDK。的确,我撰写此文时用的就是这种方法,当时我电脑中的以太网卡在项目完成前两天意外死亡了。然而,在 Apple 发布最新的 JDK 之前,我们仍然无法在 Mac OS 中运行 Java 7(或 6)应用程序。这可能发生在明天,可能发生在明年,也可能永远都不会发生。

其次,我们需要一个最新的 Java 6 SDK。Java 7 不能通过 Java 5 来编译。就我个人来说,我在设计软件时不喜欢太多的版本依赖,这对于开源软件尤其重要。但是,JDK 只是在最近才开放源码,而且显示了公司 IT 的一些遗留态度:“我们可以控制每个人的构建环境”。移除其中的一些依赖是一项正在进行的并将花费数年的任务,但是,这个过程已经取得了初步进展。就在最近,Sun 将其源码库从专用 Teamware 转移到了开源的 Mercurial 中。从封闭开发模式切换到开放开发模式是一项艰巨的任务,但最终结果是更强大、更灵活、更健壮的代码库。

第三,我们需要一个 C 编译器。其中一些 JDK 是用原生代码编写的。它们不可能都是纯 Java 编写的。对于 Linux,我们需要使用 gcc4。结于 Windows,需要使用 Microsoft Visual Studio .NET。对于 Solaris,需要使用 Sun Studio 11。

在 Linux 中,可能还需要安装或更新一些库。具体要安装哪些库,取决于您的发行版和版本。您可能还需要为现有库安装一组 C 头文件。在本文中,我使用现有的 Ubuntu 7.10 Gutsy Gibbon 发行版。大多数其他合理流通的发行版应该也能工作。如果您发现有一些发行版无法工作,不妨找出其原因并记录缺陷。

最后,在 Windows 中,您可以在 NTFS 文件系统上进行构建。您不能在 FAT-32 上构建 JDK。您还需要安装 Cygwin,因为在 Windows 上构建的 JDK 是 Windows 和 Unix 实用工具的奇异混合物。

获取源码

大约每隔一个月,Sun 会在 OpenJDK 源码发布页面 上发布一组完整的 JDK 源码。下面列出了几种不同的包:

OpenJDK 源码 JDK 7 大约 95% 的主要源码。 平台的二进制插件 Sun 实际并不拥有 JDK 中的所有代码,并且他们无法重新注册他们不拥有的代码。相反,一些代码段必须以闭源二进制软件包来提供。您将需要为您的平台下载其中一些代码。Linux、Solaris 和 Windows 在 32 位和 64 位版本中都受支持 。 Jtreg 测试工具二进制软件包下载 代码的测试框架。您不必真正使用测试框架来构建或修改代码,但是不论如何您都应该掌握它。 OpenJDK 模块项目 这包括 Java 7 的新模块系统。(我将在本系列的后续文章中介绍。) 最终,此项目将汇总到 JDK 中,但现在您并不立即需要它。

因为这些项目所占空间在 120MB 以上,下载服务器的速度可能不是一直都特别快,所以要想全部下载可能需要一段时间。开源的一个好处就是不用单击通过令人讨厌的使用许可。从普通的 URL 中可以下载任何开源软件。这使得 curl、wget 等类似工具的使用更加容易。设置批处理作业来获取这些工具,然后您就可以悠闲地喝一杯咖啡。事实上,无点击还使正常浏览器的使用更加容易。点击通过注册的方式应该可以废除了。点击通过注册只是使律师更加忙碌,除了律师谁还需要这些东西?

jars@jars-desktop:~/openjdk$ wget
  http://www.java.net/download/openjdk/jdk7/promoted/b23/openjdk-7-ea-src-b23-30_oct_2007.zip
--18:02:02-- 
http://www.java.net/download/openjdk/jdk7/promoted/b23/openjdk-7-ea-src-b23-30_oct_2007.zip
      => `openjdk-7-ea-src-b23-30_oct_2007.zip'
Resolving www.java.net... 64.125.132.37, 64.125.132.39
Connecting to www.java.net|64.125.132.37|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location:
  http://download.java.net/openjdk/jdk7/promoted/b23/openjdk-7-ea-src-b23-30_oct_2007.zip
[following]
--18:02:02--
  http://download.java.net/openjdk/jdk7/promoted/b23/openjdk-7-ea-src-b23-30_oct_2007.zip
      => `openjdk-7-ea-src-b23-30_oct_2007.zip'
Resolving download.java.net... 72.5.124.114
Connecting to download.java.net|72.5.124.114|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 84,617,174 (81M) [application/zip]
44% [===============>       ] 37,717,212  55.36K/s  ETA 12:19

现在,我们只需要前两个条件:OpenJDK 源码和二进制插件。但是,将来您可能还需要其他两个条件。

时间: 2025-01-21 19:06:53

OpenJDK:构建JDK的相关文章

CentOS下重新安装JDK,避免OpenJDK干扰

有的时候根据自己的需要,可能要不同版本的JDK,使用如下命令可以查看JDK版本 [plain] view plaincopyprint? java -version   Centos在安装的时候,自带了一个OpenJDK这个JDK并不是我们想要的.因此正常安装即可. 用我的32位的操作系统为例: 在官网下载对应版本的JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk6downloads-1902814.html 由于网络

HotSpot和OpenJDK入门

在本文中,我们将会介绍如何开始使用HotSpot Java虚拟机以及它在OpenJDK开源项目中的实现--我们将会从两个方面进行介绍,分别是虚拟机和虚拟机与Java类库的交互. HotSpot源码介绍 首先让我们看看JDK源码和它所包含的相关Java概念的实现.检查源码的方式主要有两种: 现代IDE能够附加src.zip(在$JAVA_HOME目录),能够从IDE中访问 使用OpenJDK的源码并导航到文件系统 这两种方式都非常有用,但是重要的是哪种方式比较舒适一点.OpenJDK的源码存储在M

docker dockerFile 参数解释,及生成jdk+tomcat镜像实例

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

【Linux】CentOS7下安装JDK详细过程

Linux上一般会安装Open JDK,关于OpenJDK和JDK的区别:http://www.cnblogs.com/sxdcgaq8080/p/7487369.html   下面开始安装步骤: --------------------------------------------------------------------------第一步----------------------------------------------------------------------- 第一

【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别

注意到这个问题,是在CentOS7上安装JDK的时候,查找相关的资料,发现安装JDK之前都需要检查或卸载系统上原生的Open JDK,这才引起了注意. 到了这里,引用查到的一篇说明. 转自:http://fgh2011.iteye.com/blog/1771649   历史上的原因是,openjdk是jdk的开放原始码版本,以GPL协议的形式放出.在JDK7的时候,openjdk已经成为jdk7的主干开 发,sun jdk7是在openjdk7的基础上发布的,其大部分原始码都相同,只有少部分原始

Github优秀java项目集合(中文版) - 涉及java所有的知识体系 -- good

Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站点等等.伯乐在线已经把 awesome-java 资源列表翻成中文后发布于 ImportNew. Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更

Java资源大全中文版(Awesome最新版)

目录 业务流程管理套件 字节码操作 集群管理 代码分析 编译器生成工具 构建工具 外部配置工具 约束满足问题求解程序 持续集成 CSV解析 数据库 数据结构 时间日期工具库 依赖注入 开发流程增强工具 分布式应用 分布式数据库 发布 文档处理工具 函数式编程 游戏开发 GUI 高性能计算 IDE 图像处理 JSON JVM与JDK 基于JVM的语言 日志 机器学习 消息传递 杂项 应用监控工具 原生开发库 自然语言处理 网络 ORM PDF 性能分析 响应式开发库 REST框架 科学计算与分析

在 Docker 上运行 Java 程序?你已经触犯法律!

小伙伴们惊呆了!!! 来自国外媒体 takipi 的报道:在 Docker 容器中运行 Oracle Java 可能会让你承担法律责任,为什么呢? Oracle 和 Linux 之间的关系跌宕起伏,为了在多数的 Linux 发行版使用 Oracle 的 JDK,用户都要经过一番折腾.而如果你使用 Docker ,那么问题更麻烦.因为你可能已经在未知的情况下违反了 Oracle 的许可协议.本文将为了解开其中详情以及帮你在使用 Docker 和 Java 时做出明智的决定. 首先 Java 在 L

java源码阅读方法以及经验

问题描述 java源码阅读方法以及经验 如何更好的阅读java源码,更注重阅读哪些包里面的源码,当然连好的阅读源码的工具也说明一下更好了 解决方案 我在这里假设你在问怎么阅读jdk的源码,java源码这个名字有点奇怪. 你可以build 一个fast debug版本,然后使用debugger去调试你的程序,这样对程序是怎么调用的有很直观的视图. 其次,可以看看jdk里面的regression tests,里面有很多例子. 其次,openjdk提供了netbean的jdk project,你可以很