最近有了看源码的冲动,刚把jvm虚拟机规范看了一遍,想借着看tomcat源码的机会,顺便实操下jvm虚拟机的一些东西,这样就有了搭建tomcat源码运行环境的念头。对着http://www.cnblogs.com/huangfox/archive/2011/10/20/2218970.html这篇文章给的指引,经过一番小折腾,还算顺利的搭建好了tomcat的环境,其中有些地方跟博客中讲的有点出路。下面是搭建过程。
1.Tomcat源码下载
http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.53/src/apache-tomcat-7.0.53-src.zip
2、安装ant,配置环境变量
第三部:导入jar包。
上面那些不爽的红叉是因为缺少jar的原因,我们现在需要那些jar包呢?
test需要junit.jar,这个直接用eclipse里面的即可。
java中需要:
- ant.jar
- jaxrpc.jar
- org.eclipse.jdt.core_3.3.1.v_780_R33x.jar
- wsdl4j-1.5.1.jar
导入后就清爽了!
注意:这里在ant官网下载也可以。
3、eclipse准备
下载适当版本的eclipse就可以了
4、ant编译tomcat源码(跟导入到eclipse没什么关系)
4.1)使用ant编译tomcat源码,在编译之前需要下载相关的依赖项目。我们并不知道编译需要哪些依赖项目,怎么办?
让ant来帮忙吧!我们只需要准备一个存放这些依赖项目的地方,例如E:\users\pengsy\software\basepath。
4.2)要让ant工作起来,我们还要将apache-tomcat-7.0.53-src中的build.properties.default重命名为build.properties,
并且打开它,修改base.path=E:/users/pengsy/software/basepath。这里特别要注意路径的写法,不是“\”而是“/”,否则运行ant会报错“java.lang.IllegalArgumentException: Malformed \uxxxx encoding”。
4.3)修改配置文件build.xml,去掉2910行的httpusecaches="${trydownload.httpusecaches}",这点是原来那篇博客里面没有的。
4.4)等依赖项目下载好后,就可以编译tomcat了。执行命令:ant。(这里注意使用jdk6编译,并且是jdk6的运行时)当编译完成后,我们可以查看目录apache-tomcat-7.0.53-src,可以发现里面多了一个文件夹:output。output文件夹的结构如下:

进入bin,启动tomcat成功,就说明——ant编译tomcat成功了!
5、将tomcat源码导入eclipse
第一步:
在eclipse里新建一个java项目,例如:tomcat7。
第二步:
import->file system
在From directory选择tomcat源码,选择java和test(如果你需要测试的话选择test),如下图:、
在into folder中选择我们刚新建的tomcat7,finish。
note:将java、test设置成source folder,java build path ->Source->Add folder...->选择java和test。
这里很奇怪,我选择的test没有在工程的目录结构中显示出来。(ant命令运行成功之后,才会有test目录)
第三步:导入jar包。
上面那些不爽的红叉是因为缺少jar的原因,我们现在需要那些jar包呢?
test需要junit.jar,这个直接用eclipse里面的即可。
java中需要:
同时,JDTCompiler用到了jdk1.8的东西,我的做法是直接屏蔽出错代码。
导入后就清爽了!
第四步:
在eclipse中启动tomcat。
找到类:org.apache.catalina.startup包中的Bootstrap类。
run as:在Arguments的VM arguments中设置(注意:在catalina.home指定的目录中,请事先创建conf目录,以及在该目录下放置server.xml文件,否知tomcat启动不起来)
-Dcatalina.home="d:\output\build"
然后就可以启动了!

注意:这里仅代表启动成功,还不能对外提供访问。