編寫本身的tomcat, 並運行tomcat源碼於eclipse中

最近慢慢閒了,打算圓了之前留下的願望。就是把tomcat的源碼都走一邊。能夠幫助我更深層次的理解一個web服務器的工做原理。php

這個週末,我便埋出了第一步。將基於eclipse的整個tomcat的源碼開發環境建立成功,併成功的調試tomcat源碼。下面記錄我所作的事情。java

JDK 1.6

下載oracle或者IBM JDK 1.6版本。1.6是必須的,由於tomcat7的明確要求JDK1.6來build。web

準備eclipse

1. 到http://www.eclipse.org/downloads/下載一個eclipse。我下載的是最新的Indigo版本。選擇的是IDE for Java EE developers。apache

2. 給eclipse安裝SVN插件,tomcat的源代碼使用的版本控制工具是SVN。咱們須要用SVN來同步源碼。http://www.eclipse.org/subversive/downloads.php提供了SVN插件的安裝步驟。tomcat

準備ANT

http://ant.apache.org/選擇1.8.3的版本下載。服務器

設置環境變量

添加環境變量JAVA_HOME和ANT_HOME。將%ANT_HOME%\bin添加到PATH中。網絡

建立目錄管理你的文件

爲了更好的管理你的文件,你最好組織一下本身的文件結構,個人文件結構以下。後面全部的工做都基於我下面的文件結構。oracle

job - 工做的根目錄。app

apache-ant-1.8.3是ant的home。eclipse

downloads - 剛纔網上下載的全部原始文件都在這裏面。此文件對於tomcat運行沒有影響。

eclipse - eclipse indigo for java ee developers

jad - 反編譯工具。此文件對於tomcat運行也沒有影響。

screen - 用於保存我屏幕截圖的。對於tomcat運行沒影響。

tomcat-build-download - 重要文件,在build tomcat的時候,build會自動下載一下tomcat所依賴的包。全部的依賴會自動下載都這個文件下。

tomcat-compile-dependence - tomcat源碼導入eclipse以後編譯的時候所依賴的包都存放在這個文件下面。

workspace - eclipse的工做目錄。

workspace\tc7.0.x - 從svn同步下來的tomcat源碼。

workspace\tomcat - 爲tomcat源碼建立的java項目。

下載源碼

1,打開eclipse,轉到SVN Repository exploring。

2,建立一個新的repository。URL爲tomcat的repository地址http://svn.apache.org/repos/asf/tomcat。能夠從tomcat官網找到。

 3. 結束之後,將看到eclipse左邊欄中建立好的repository。展開repository,找到最近版本的tomcat 7.0.x. 展開, 選擇trunk.右鍵點擊,在菜單中選擇"check out".

4, 文件tc7.0.x將會被下載到workspace目錄,因而產生了目錄 workspace\tc7.0.x 。

Build源碼

在下載好的tc7.0.x目錄下面,能夠找到BUILDING.txt。這個文件裏面給出了詳細的Build方法。也列出了全部的build命令。若是你們只是想快速進行下去,能夠按照我下面寫的步驟快速搭建你的環境。

1,在下載好的文件下面,找到build.properties.default. 複製這個文件,到同級目錄並重命名爲build.properties.

2,打開build.properties, 找到base.path,替換此行,改成base.path=C:/job/tomcat-build-download.   Base path聲明瞭tomcat build所依賴的外部資源的目錄。Build過程當中全部的網絡依賴資源,都下載到此目錄下面。

3,在tc7.0.x目錄下運行命令ant.

ant成功後,外部依賴會下載到base.path下面。Source code會被build成可運行文件,輸出到\job\workspace\tc7.0.x\output中。

導入eclipse

1,建立一個空的eclipse java project。起名爲tomcat.

2,點擊項目->右鍵菜單->import... -> File System->

3, 點擊Finish,將會完成導入。

4,源代碼成功的導入到eclipse中,可是存在編譯錯誤。這是由於缺失了一些編譯所依賴的包。下面咱們找出全部的依賴包,將他們放入目錄tomcat-compile-dependence中。

5,在build的時候,ant會下載一些依賴包,當完成編譯之後,ant會把一些依賴包刪除掉。爲了把全部的依賴包從新下載一邊,須要在tc7.0.x目錄下運行命令ant extras

6,找到下面的jar,把他們copy到tomcat-compile-dependence中。

C:\job\apache-ant-1.8.3\lib\ant.jar

C:\job\tomcat-build-download\ecj-3.7.2\ecj-3.7.2.jar

C:\job\tomcat-build-download\jaxrpc-1.1-rc4\geronimo-spec-jaxrpc-1.1-rc4.jar

C:\job\tomcat-build-download\wsdl4j-1.6.2\wsdl4j-1.6.2.jar

7,將tomcat-compile-dependence中全部的包導入project的build path中。tomcat編譯經過。

在eclipse中運行源碼

打開run as configuration...

點擊run,就能跑起來了。

能在eclipse中運行,天然就能debug。

2013年1月29日,更新

更新緣由: 由於tomcat的源碼是運行在eclipse中,並直接運行的java類啓動tomcat的. 忽然有一天,我寫了一個application, 並放在tomcat的webApps下面. 我想remote debug個人application. 這須要開啓tomcat的remote debug模式. 其實,就是開啓jvm的debug模式, 開啓方法以下圖:

如過想開啓tomcat的log,還須要在VM arguments中添加:

-Djava.util.logging.config.file=d:\servers\tomcatSrc\src\output\build\conf\logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
相關文章
相關標籤/搜索