本文是Tomcat源码阅读系列的第一篇文章,该系列文章更多的是参考了网络上其他博主的博客和《How tomcat works》这本书。本文作为开篇,将描述一下,如何将Tomcat源码在Idea环境中运行起来。
1. 下载Tomcat6源码
到http://tomcat.apache.org/download-60.cgi处下载源码,如下图。
2. 创建聚合模块pom.xml
需要通过Maven组织文件,因此需要在apache-tomcat-6.0.44-src根目录下创建pom.xml文件,如下,
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.tomcat</groupId> <artifactId>Tomcat6.0</artifactId> <name>Tomcat6.0</name> <version>6.0</version> <build> <finalName>Tomcat6.0</finalName> <sourceDirectory>java</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> <resources> <resource> <directory>java</directory> </resource> </resources> <testResources> <testResource> <directory>test</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <encoding>UTF-8</encoding> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.5</version> <scope>test</scope> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>4.2.2</version> </dependency> </dependencies> </project>
如下:
3. 创建项目根目录的pom.xml
- 创建apache-tomcat-6.0.44-study文件夹
- 将包含pom.xml文件的apache-tomcat-6.0.44-src文件夹复制到apache-tomcat-6.0.44-study文件夹下
- apache-tomcat-6.0.44-study文件夹下创建catalina-home文件家
- 将D:\javaee_workspace\apache-tomcat-6.0.44-study\apache-tomcat-6.0.44-src\conf复制到D:\javaee_workspace\apache-tomcat-6.0.44-study\catalina-home\conf文件夹下
- 在apache-tomcat-6.0.44-study文件夹下创建pom.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yang</groupId> <artifactId>apache-tomcat-study</artifactId> <name>Tomcat 6.0 Study</name> <version>1.0</version> <packaging>pom</packaging> <modules> <module>apache-tomcat-6.0.44-src</module> </modules> </project>整体架构如下:
4. 使用Idea打开apache-tomcat-6.0.44-study项目
- 标记java文件夹为source root
- 设置Main class为:org.apache.catalina.startup.Bootstrap
- 设置VM options为:
-Dcatalina.home=catalina-home -Dcatalina.base=catalina-home -Djava.endorsed.dirs=catalina-home/endorsed -Djava.io.tmpdir=catalina-home/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=catalina-home/conf/logging.properties如图:
在Bootstrap的main方法当中加入测试代码:
System.out.println("======================Tomcat Study======================");
启动项目打印
======================Tomcat Study====================== 2015-6-15 21:16:55 org.apache.catalina.startup.ClassLoaderFactory validateFile 警告: Problem with directory [D:\javaee_workspace\apache-tomcat-6.0.44-study\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false] 2015-6-15 21:16:55 org.apache.catalina.startup.ClassLoaderFactory validateFile 警告: Problem with directory [D:\javaee_workspace\apache-tomcat-6.0.44-study\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false] 2015-6-15 21:16:55 org.apache.catalina.startup.ClassLoaderFactory validateFile 警告: Problem with directory [D:\javaee_workspace\apache-tomcat-6.0.44-study\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false] 2015-6-15 21:16:55 org.apache.catalina.startup.ClassLoaderFactory validateFile 警告: Problem with directory [D:\javaee_workspace\apache-tomcat-6.0.44-study\catalina-home\lib], exists: [false], isDirectory: [false], canRead: [false] 2015-6-15 21:16:55 org.apache.catalina.startup.Embedded initDirs 严重: Cannot find specified temporary folder at catalina-home/temp 2015-6-15 21:16:55 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jdk1.6.0_37\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Program Files (x86)\Common Files\NetSarang;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.6.0_45\bin;C:\Program Files\Java\jdk1.6.0_45\jre\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Common Files\lenovo\easyplussdk\bin;. 2015-6-15 21:16:55 org.apache.coyote.http11.Http11Protocol init 信息: Initializing Coyote HTTP/1.1 on http-8080 2015-6-15 21:16:55 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 195 ms 2015-6-15 21:16:55 org.apache.catalina.core.StandardService start 信息: Starting service Catalina 2015-6-15 21:16:55 org.apache.catalina.core.StandardEngine start 信息: Starting Servlet Engine: Apache Tomcat/@VERSION@ 2015-6-15 21:16:55 org.apache.coyote.http11.Http11Protocol start 信息: Starting Coyote HTTP/1.1 on http-8080 2015-6-15 21:16:55 org.apache.jk.common.ChannelSocket init 信息: JK: ajp13 listening on /0.0.0.0:8009 2015-6-15 21:16:55 org.apache.jk.server.JkMain start 信息: Jk running ID=0 time=0/8 config=null 2015-6-15 21:16:55 org.apache.catalina.startup.Catalina start 信息: Server startup in 47 ms
Tomcat源码成功运行。