最近打算開始研究一下Tomcat的工作原理,拜讀一下源碼。所以先從編譯源碼開始了。盡管網上有那么多的資料,但是總是覺得,自己研究一遍,寫一遍,在動手做一遍能夠讓我們更加深入的了解。現在整個社會都流行着浮躁的風氣,各種速成班,催熟劑的讓我們難易靜下心來去好好的研究一下技術。現在想想高中時候雖然很累,但是很充實。知道自己每天都干了些什么,再想想現在,是否還經常寫字,寫文章?是否還經常讀書。我在經過了很長一段時間沉浸在只是上下班,重復以往的無聊日子后,終於明白了,學習讀書依然要繼續,要好好為自己充電來充實自己。不要一直沉浸在自己的世界中沾沾自喜,要居安思危。
再說說編譯tomcat8.0源碼的過程,自己在研究編譯的過程也是遇到了很多的彎路曲折
第一步:首先要安裝jdk,這個相信大家干這一行的都會安裝。我編譯的是tomcat8.0,jdk用的1.7。因為我編譯tomcat7時用的jdk7,結果編譯出錯,查閱資料說是jdk版本太高了。所以我就用了比jdk高一個版本的tomcat8來編譯。
第二步:先去Apache-Tomat官網下載8.0版本的tomcat,我之前tomact7和tomcat8的源碼都下了。下載完源碼后解壓縮。
第三步:編譯tomcat還需要另一個利器。那就是ant。ant也是apache的一款工具,是一個將軟件編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟件開發。我下載的是apache-ant-1.9.6。下載完了要配置ant的環境變量。配置一個ANT_HOME ,路徑是ant存放的位置,如放到了D:/software/apache-ant-1.9.6。再把ANT_HOME配置到環境變量path下。配置完后再cmd命令窗口中執行ant -version

第四步:在該目錄下新建一個libs的文件夾。該文件夾就是tomcat依賴的jar包的下載位置。將解壓的tomcat源碼中的build.properties.default文件名改為build.properties。打開該文件找到base.path配置項,把該配置項的路徑改為依賴包的位置。如:libs的目錄是, C:/tomcat8.0-src/libs。那么build.pase=C:/tomcat8.0-src/libs。注意如果你拷貝進去的路徑是baild.pase=C:\tomat8.0-src\libs。那么這樣是會報錯的。應該把\轉義一下。所以路徑應該是build.pase=C:\\tomat8.0-src\\libs
第五步:CTRL+R打開cmd命令窗口,進入到所解壓的tomcat8.0的源碼的位置。然后執行命令 ant download。我在執行該命令的時候報錯了。但是也給我下載了一下jar包

但是后面的一些jar包就下載不下來了,試了幾次依然沒有成功。所以就直接往后操作了。
第六步:執行命令:ant 執行該命令會花費一些時間,但最終會出現build successful的字符串。表明編譯成功。


並且會在該源碼目錄下自動新增一個output的文件夾,該文件夾下的內容就是編譯的tomcat
說是
第七步:將源碼導入eclipse中,新建一個java項目。如:tomcat8.0-src。然后將把解壓源碼中的java和test兩個源碼文件夾import到新建的tomcat8.0-src工程中。





第八步:把導入的java和test兩個文件標記為source folder,右鍵選擇文件夾->Build Path->Use as Source Folder。標記為source folder后兩個代碼目錄都出現了錯誤。這是因為缺少依賴的jar包
第九步:導入依賴的jar包
ant.jar:在你安裝的ant目錄:ANT_HOME/lib下。
jaxrpc.jar:在eclipse下的/plugin/ javax.xml.rpc_xxx(版本號)/lib/目錄下。
org.eclipse.jdt.core_3.10.2.v20150120-1634.jar:在eclipse的plugin目錄下。Eclipse版本不同,名字可能不同。
wsdl4j-1.5.1.jar:可以從網上下,這個地方我是從之前執行ant download命令時自動下載下來的。
右鍵tomcat8->Build Path->Configuration Build Path。導入上面的幾個包,java目錄下就沒有錯了,如果test目錄下還有錯,可以注釋掉錯誤的文件。
第十部:執行org.apache.catalina.startup下的Bootstrap,這里面有main方法,會啟動tomcat源碼。執行后結果報錯


說是服務的實例沒有配置。這是因為當前項目路徑下沒有lib和conf這兩個文件夾,從而找不到服務器配置文件server.xml,當然也就不能實例化服務器了。解決方法:
a、 第一種方法把前面編譯生成的output目錄下的/build/下的lib和conf兩個目錄拷貝到tomcat下,這時就可以直接啟動了。
b、 第二種方法就是添加VM參數,指定這兩個文件夾的具體路徑,用VM的-D參數指定catalina.home屬性值為具體的路徑,具體方法如下:
Run as -> Run Configuration... - > Arguments -> VM arguments中設置:-Dcatalina.home=” C:\tomcat8.0-src\output\build”,然后Run就可以啟動了。
第十一步:驗證項目是否啟動成功。地址欄中輸入localhost:8080/,然后回車,端口是可以自由設置的。這里用的默認端口8080


至此tomcat源碼編譯完成,當然其中還遇到過一些別的錯誤,這里就不一一列舉了。自己也是摸索着來的,也借鑒了很多的文章,如下:
http://www.cnblogs.com/dlutfengyu/p/5346080.html
http://www.cnblogs.com/xlbu/p/3750551.html
