使用Maven编译Tomcat源码
准备工作
- 编译工具:Intellij Idea 15.0.2
- Tomcat版本:7.0.69 下载链接
- JDK版本:1.7.0_80
- Maven版本:3.05
编译步骤
1. 在工作空间中建立目录 TomcatSource,下载源码解压到此文件夹,完成后目录结构如下
TomcatSource|--bin|--conf|--java|--modules|--res|--test|--webapps|--...
2. 在TomcatSource目录下添加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>Tomcat7.0</artifactId> <name>Tomcat7.0</name> <version>7.0</version> <build> <finalName>Tomcat7.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.3</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.12</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> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.3</version> </dependency> </dependencies> </project>
3. 将项目使用Intellij Idea 打开(对应eclipse导入项目),使用maven工具编译。
4. 打开Bootstrap.java类配置启动参数,VM options 下填写
-Dcatalina.home=TomcatSource -Dcatalina.base=TomcatSource -Djava.endorsed.dirs=TomcatSource/endorsed -Djava.io.tmpdir=TomcatSource/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=TomcatSource/conf/logging.properties
5. DEBUG模式启动 Bootstrap.java 类的main方法,结束。
注意事项
- 本方法使用的是maven方式编译,如果使用Ant方式编译参见
Tomcat官网-->Documentation-->Development-->Building
- 编译特定版本的Tomcat源码需要的JDK版本不同,具体同时可以在Building页面参见。
- 工作目录中
TomcatSource
可以随意命名,不过在添加VM options参数的时候需要修改指定名称保持一致 - 添加的
pom.xml
文件中更改了maven项目默认的source
和test
的目录(src/main/java
和src/main/test
)修改为java
和test
。 pom.xml
文件中添加的依赖是tomcat编译过程中需要依赖的包,也许你在使用maven编译的时候会发现依旧有错误,如果是test目录相关文件可以删除,也可以去常见的maven中央仓库去寻找下载相关依赖。- maven工具编译是指在TomcatSource目录下打开命令行工具(cmd窗口)使用命令
mvn clean install
去编译。 - VM options参数意义:
startup.bat
调用catalina.bat
,catalina.bat
会传递一堆参数 并且传递给Bootstrap.java
类的main
方法,这里传递的参数就是VM options。 - VM options参数获取的方法:
在bin/catalina.bat 或者 catalina.sh 文件中找到下面一行
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
然后在这行下添加以下命令
echo Tomcat VM options start
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
echo Tomcat VM options end
pause
保存退出,运行startup.bat,在cmd窗口在start和end 中间的输出就是VM options