Java学习篇之---研究tomcat源码
最近心血来潮想要研究一下Web容器的体系结构,于是选择了最常用的tomcat。打算将tomcat源码放入ide中,编写实例进行代码跟踪。本篇文章中记录了,编译tomcat源码并导入到eclipse中的整个过程。
一、下载
1、下载tomcat。 这里下载的是本文发表之时,最新版本的tomcat-8.0.27 :
2、下载ant:
3、IDE选择eclipse 4.4.1。
二、路径配置:
1、将ant下载下来解压后重命名为apacheAnt放到E盘,将路径
E:\apacheAnt\bin
配置到系统环境变量中。
成功后在任意目录下输入命令则会如图所示:
2、将tomcat源码解压在D盘目录:
D:\WorkSpace\tomcatSrcTest\apache-tomcat-8.0.27-src
3、新建目录:
D:\WorkSpace\tomcatSrcTest\depedencyBasePath
使用ant编译tomcat源码,在编译之前需要下载相关的依赖项目,此目录用于存放依赖项目。
三、依赖项下载并编译:
将apache-tomcat-8.0.27-src文件夹中的build.properties.default重命名为build.properties,
并且打开它,修改base.path=D:\WorkSpace\tomcatSrcTest\depedencyBasePath。
在命令行进行如下操作:显示build failed。
原因找到了:在命令行输入ant 就可以自动下载依赖项了,不用ant download 命令。
output文件夹的结构如下:
我们会发现这个结构和从安装包里解压出来的tomcat结构一致。
进入bin,启动tomcat
Tomcat启动成功了,说明——ant编译tomcat成功了!
四、导入到eclipse中:
1、新建一个Java项目,命名为tomcat8:
2、导入代码:
import->file system
在From directory选择tomcat源码,选择java和test(如果你需要测试的话选择test),如下图:
在into folder中选择我们刚新建的tomcat8,finish。
将java、test文件夹设置为source folder,如下图所示:
此时文件目录如下图所示:
3、导入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.6.2.jar
ant.jar位置:
E:\apacheAnt\lib
jaxrpc.jar位置:
E:\eclipse-jee-luna-SR1-win32-x86_64\eclipse\plugins\javax.xml.rpc_1.1.0.v201209140446\lib
org.eclipse.jdt.core_3.3.1.v_780_R33x.jar位置:
E:\eclipse-jee-luna-SR1-win32-x86_64\eclipse\plugins
easymock-3.3.jar下载位置:
http://sourceforge.net/projects/easymock/
wsdl4j-1.6.2.jar包是我在以前项目的lib文件夹中找到的
导入完这几个jar包后,项目中test文件夹中仍然报错:
姑且不管了。
4、在eclipse中启动tomcat:
找到类:org.apache.catalina.startup包中的Bootstrap类。
run as:在Arguments的VM arguments中设置
-Dcatalina.home="D:\WorkSpace\tomcatSrcTest\apache-tomcat-8.0.27-src\output"
然后就可以启动了!
Run As->Java Application
5、启动成功:
问题:
为什么要设置-Dcatalina.home="D:\WorkSpace\tomcatSrcTest\apache-tomcat-8.0.27-src\output\build"?
首先说明output是什么——它就是ant编译出来的output文件夹,大家可以试试删除里面的东西看还是否可以成功启动。
如果不配置这个参数又会发生什么情况呢?删除-Dcatalina.home="D:\WorkSpace\tomcatSrcTest\apache-tomcat-8.0.27-src\output\build",报错:
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.ClassLoaderFactory validateFile警告: Problem with directory [D:\WorkSpace\eclipse\tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\WorkSpace\eclipse\tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\WorkSpace\eclipse\tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.ClassLoaderFactory validateFile
警告: Problem with directory [D:\WorkSpace\eclipse\tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.Catalina load
警告: Unable to load server configuration from [D:\WorkSpace\eclipse\tomcat8\conf\server.xml]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.Catalina load
警告: Unable to load server configuration from [D:\WorkSpace\eclipse\tomcat8\conf\server.xml]
十月 15, 2015 9:49:25 上午 org.apache.catalina.startup.Catalina start
严重: Cannot start server. Server instance is not configured.
从中可以看出在项目的根目录下没有lib文件夹,没有conf文件夹,conf中没有server.xml,从而不能实例化server。
那么按照他的提示做,在启动就ok了!