1.2 准备源代码阅读环境 在研究一个开源项目之前,都需要安装与配置基本的开发环境和源代码的阅读环境。这一系列内容包括:安装与配置jdk、安装开发调试ide、安装与配置相关辅助工具等。 1.2.1 安装与配置jdk 在分析hadoop的源代码前,需要做一些准备工作,
1.2 准备源代码阅读环境
在研究一个开源项目之前,都需要安装与配置基本的开发环境和源代码的阅读环境。这一系列内容包括:安装与配置jdk、安装开发调试ide、安装与配置相关辅助工具等。
1.2.1 安装与配置jdk
在分析hadoop的源代码前,需要做一些准备工作,其中搭建java环境是必不可少的。hadoop的运行环境要求java 1.6以上的版本。打开http://www.oracle.com/technetwork/java/javase/downloads/index.html页面,可以下载最新的jdk安装程序,下载页面如图1-2所示。
安装完后,要检查jdk是否配置正确。
某些第三方的程序会把自己的jdk路径加到系统path环境变量中,这样,即便安装最新版本的jdk,系统还是会使用第三方程序所带的jdk。在windows环境中,需要正确配置的java运行时环境变量有java_home、classpath和path等。
方便起见,我们往往为操作系统本身指定一个系统级别的环境变量。例如,windows平台上的系统环境变量可以在“系统属性”的“高级”选项卡中找到,可在其中配置java_home、path和classpath值。图1-3是windows xp操作系统中为系统添加java_home环境变量的例子。
安装并配置完成后,可以在命令行窗口中输入“java -version”命令检测当前的jdk运行版本。如果配置完全正确,会显示当前客户端的jre运行版本,如图1-4所示。
1.2.2 安装eclipse
在成功安装和配置jdk后,还需要安装进行java开发调试的ide(integrated development environment,集成开发环境),因为一个好的开发环境和源代码阅读环境可以使工作效率事半功倍。目前比较常用的java开发ide主要有eclipse和netbeans等,读者可以任意选择自己习惯的ide作为开发工具。本书以eclipse集成开发环境为例,着重介绍在eclipse中开发与调试源码的方法。读者也可以举一反三,在其他ide中做相应的尝试。
eclipse是一个界面友好的开源ide,并支持成千上万种不同的插件,为代码分析和源码调试提供了极大的便利。可以在eclipse官方网站(http://www.eclipse.org/downloads/)找到eclipse的各个版本(对hadoop源码进行分析,只需要下载eclipse ide for java se developers)并下载安装。eclipse下载页面如图1-5所示。eclipse是基于java的绿色软件,解压下载得到zip包后就能直接使用。关于eclipse的基本使用已超出了本书的范围,因此下面仅向读者简要介绍如何使用eclipse进行一些基本的源代码分析工作。
1. 定位某个类、方法和属性
在分析源代码的过程中,有时候需要快速定位光标位置的某个类、方法和属性,在eclipse中可通过按f3键,方便地查看类、方法和变量的声明和定义的源代码。
有时候在查看一些在jdk库中声明/定义的类、方法和变量的源代码时,打开的却是相应的class文件(字节码),为此eclipse提供了一个功能,把字节码和源代码关联起来,这样,就可以查看(提供源代码)第三方库的实现了。
eclipse打开字节码文件时,可以单击“attach source”按钮进行字节码和源代码关联,如图1-6所示。
在查看java.net.url时,eclipse提示代码关联,将jdk中附带的jdk源文件压缩包(在安装目录下可以找到,名字是“src.zip”)绑定到“rt.jar”,以后,只要访问该jar包中的字节码文件,eclipse就会自动显示相应的源代码文件。
其他第三方java插件的源代码文件的载入方法类似。
2. 根据类名查找相应的类
如果知道希望在编辑器中打开的java类的名称,则找到并打开它的最简单的方法是使用快捷键ctrl+shift+t(或者单击navigate→open type)打开open type窗口,在该窗口中输入名称,eclipse将显示可以找到的匹配类型列表。图1-7显示了hadoop 1.0中名字包含“hdfs”的所有类。
注意 除了输入完整的类名之外,还可以使用“*”和“?”通配符来分别匹配“任何”或“单个”字符。
3. 查看类的继承结构
java是面向对象的程序设计语言,继承是面向对象的三大特性之一,了解类、接口在继承关系上的位置,可以更好地了解代码的工作原理。选中某个类并使用ctrl + t快捷键(或单击navigate→quick type hierarchy)可以显示类型层次结构。
层次结构将显示所选元素的子类型。如图1-8所示,该列表显示已知的所有org.apache.hadoop.fs.filesystem子类。
4. 分析java方法的调用关系
在eclipse中可以分析java方法的调用关系,具体做法如下:在代码区中选择相应的方法定义,然后用鼠标右键选取open call hierarchy项或者使用快捷键ctrl+alt+h,则可以在call hierarchy视图中看到方法的调用关系,该视图还提供了一层一层的方法调用追溯功能,对查找方法的相互调用关系非常有用,如图1-9所示。
注意 快捷键是日常开发调试中最为便捷的技巧。eclipse中的快捷键也可谓是博大精深,这里不一一列举。读者可以在实际开发中不断摸索并牢记这些快捷键,因为它们也是日常开发中必不可少的内容。读者也可参照eclipse中的这些快捷键,在其他ide中找到相应的快捷键设置。
1.2.3 安装辅助工具ant
在安装和配置了jdk和eclipse后,为了编译hadoop,还需要安装辅助工具ant。
对hadoop这样复杂的项目进行构建,不是仅仅将java源文件编译并打包这么简单,项目中使用到的各种资源都需要得到合理的安排,如有些文件需要拷贝到指定位置,有些类需要放入某个jar归档文件,而另外一些类则需要放入另外一个jar归档文件等,这些工作如果全部由手工执行,项目的构建部署将会变得非常困难,而且难免出错。ant是针对这些问题推出的构建工具,在java的项目中得到了最广泛的使用。
ant跨平台、可扩展,而且运行高效,使用ant,开发人员只需要编写一个基于xml的配置文件(文件名一般为build.xml),定义各种构建任务,如复制文件、编译java源文件、打包jar归档文件等,以及这些构建任务间的依赖关系,如构建任务“打包jar归档文件”需要依赖另外一个构建任务“编译java源文件”。ant会根据这个文件中的依赖关系和构建任务,对项目进行构建、打包甚至部署。
和hadoop一样,ant也是apache基金会支持的项目,可以在http://ant.apache.org/bindownload.cgi下载,下载页面如图1-10所示。
和eclipse类似,ant也是绿色软件,不需要安装,解压缩下载的文件后需要做一些配置,用户需要添加环境变量ant_home(指向ant的根目录),并修改环境变量path(在windows环境下,添加%ant_home%\bin到path中)。安装并配置完成后,可以在命令行窗口中输入“ant -version”命令来检测ant是否被正确设置。
hadoop的ant还使用了一个工具:apache ivy,它是ant的一个子项目,用于管理项目的外部构建依赖项。外部构建依赖项是指软件开发项目的构建需要依靠来自其他项目的源代码或jar归档文件,例如,hadoop项目就依靠log4j作为日志记录工具,这些外部依赖项使得构建软件变得复杂。对于小项目而言,一种简单可行的方法是将其依赖的全部项目(jar文件)放入一个目录(一般是lib)中,但当项目变得庞大以后,这种方式就会显得很笨拙。apache的另外一个构建工具maven中,引入了jar文件公共存储库的概念,通过外部依赖项声明和公开的公共存储库(通过http协议)访问,自动查找外部依赖项并下载,以满足构建时的依赖需要。
ivy提供了ant环境下最一致、可重复、易于维护的方法,来管理项目的所有构建依赖项。和ant类似,ivy也需要开发人员编写一个xml形式的配置文件(一般文件名为ivy.xml),列举项目的所有依赖项;另外还要编写一个ivysettings.xml文件(可以随意为此文件命名),用于配置下载依赖关系的jar文件的存储库。通过ant的两个ivy任务ivy:settings和ivy:retrieve,就可以自动查找依赖项并下载对应的jar文件。
1.2.4 安装类unix shell环境cygwin
对于在windows上工作的读者,还需要准备类unix shell环境的cygwin。
注意 在linux等类unix系统中进行hadoop代码分析、构建的读者可以略过这一节。
cygwin是用于windows的类unix shell环境,由两个组件组成:unix api库(它模拟unix操作系统提供的许多特性),以及在此基础上的bash shell改写版本和许多unix实用程序,它们一起提供了大家熟悉的unix命令行界面。
cygwin的安装程序setup.exe是一个标准的windows程序,通过它可以安装或重新安装软件,以及添加、修改或升级cygwin组件。其下载页面为http://cygwin.com/index.html,如图1-11所示。
执行安装程序setup.exe,并在安装程序的步骤4(cygwin setup – select package)中选择unix的在线编辑器sed,如图1-12所示(可以利用search输入框快速找到sed)。
在安装sed时,setup.exe会自动安装它依赖的包。在cygwin中,可用的包超过1000个,所以只需选择需要的类别和包,以后随时可以通过再次运行setup.exe,添加整个类别或单独的包。在windows下构建hadoop,只需要文本处理工具sed。
安装完成后,使用start菜单或双击cygwin图标启动cygwin。可以在shell环境中执行“ant -version | sed s/version/version/g”命令验证cygwin环境,如图1-13所示。
成功安装jdk、eclipse、ant和cygwin之后,就可以开始准备hadoop源代码分析的eclipse环境了。