搭建Tomcat8原始碼開發

未名的風發表於2016-10-18

概述

開源軟體tomcat,目前幾乎已經是Java web開發的必備軟體了,目前有很多關於tomcat的書籍,但是裡面介紹的大多是關於tomcat的配置,已經通過配置對tomcat進行一些跟應用業務功能的調優,作為一個Java開發人員,感覺如果僅僅只是瞭解一些配置,可能稍微少了一點什麼,最好能夠深入到原始碼中進行學些和了解。
在Google上搜尋了很多關於tomcat原始碼環境搭建的文章,發現按照文章的步驟,幾乎都啟動不了,於是自己嘗試搭建,下面是搭建的方法。

基礎環境搭建

  1. 下載tomcat原始碼,我這裡是通過svn的方式下載的,svn下載地址
    2.下載安裝maven工具,這裡我就不多說了,安裝說明太多了,自己網上找。

3.IDE,我這裡使用idea

生成maven工程

我的程式碼本地目錄是:/Users/helanzhou/Documents/helanzhou/java/Tomcat/tomcat8/tomcat-8.5.5-sourcecode。先在該目錄下生成一個pom.xml檔案,pom檔案的內容為:

<?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>Tomcat8.0</artifactId>
    <name>Tomcat8.0</name>
    <version>8.0</version>

    <build>
        <finalName>Tomcat8.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.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>3.4</version>
        </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.5.1</version>
        </dependency>
    </dependencies>
</project>

在這裡,我把javatest這兩個模組到載入到pom工程裡,你也可以選擇將test工程移除,這樣可以省不少事情。

在idea中匯入tomcat pom工程

將tomcat的pom工程匯入到idea中,這個時候,你可以找到tomcat的啟動類org.apache.catalina.startup.Bootstrap, 找到main方法,嘗試啟動tomcat,這個時候肯定是報錯的,因為你還有很多後面的步驟沒有完成。

1.需要設定一個執行時的CATALINA_HOME目錄,你需要下載一個tomcat軟體的壓縮包,由於我選擇的是tomcat-8.5.5的原始碼,下載對應的tomcat版本,tomcat下載地址
2.和tomcat-8.5.5-sourcecode這個目錄的上層目錄上,建一個和該目錄平行的目錄catalina-home,將tomcat軟體解壓後,在解壓的目錄下,將以下目錄拷貝到catalina-home中:

bin
conf
lib
logs
temp
webapps
work

在本地的目錄結構是這樣的:
_2016_10_16_7_07_14

3.在idea的右上角找到run這個按鈕,旁邊有Edit Configurations...這個選項,點選它。得到一個彈出框。

Man class:中填入,org.apache.catalina.startup.Bootstrap
VM options:中填入,你剛剛設定catalina-home路徑,我的是:-Dcatalina.home="/Users/helanzhou/Documents/helanzhou/java/Tomcat/tomcat8/catalina-home"
Working directory是預設的,不用管
Use class path of module裡選擇Tomcat8.0,這個和你在pom.xml中的配置有關
JRE,我選擇的是1.8

如下圖:
_2016_10_16_8_02_07

4.儲存上面的配置,然後在右上角選擇run,這個時候,可以啟動起來了,你可以在控制檯上看到下圖的啟動日誌:
_2016_10_16_8_03_35
如果你將test工程也包含在pom工程裡,有可能你會啟動失敗,報錯的類是:TestCookieFilter.java 報裡面的CookieFilter.java類不存在,你可以選擇註釋,也可以選擇實現該filter,我是註釋掉的。

5.開啟chrome瀏覽器,輸入127.0.0.1:8080,這時候,你能夠得到下面的頁面:
_2016_10_16_7_23_19

這個時候,說明你的tomcat環境配置已經成功了,接下來,開啟你的tomcat原始碼除錯之旅吧!


相關文章