最近慢慢閒了,打算圓了之前留下的願望。就是把tomcat的源碼都走一邊。能夠幫助我更深層次的理解一個web服務器的工做原理。php
這個週末,我便埋出了第一步。將基於eclipse的整個tomcat的源碼開發環境建立成功,併成功的調試tomcat源碼。下面記錄我所作的事情。java
下載oracle或者IBM JDK 1.6版本。1.6是必須的,由於tomcat7的明確要求JDK1.6來build。web
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
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 。
在下載好的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中。
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編譯經過。
打開run as configuration...
點擊run,就能跑起來了。
能在eclipse中運行,天然就能debug。
更新緣由: 由於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