使用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