標籤:
原地址:http://denger.iteye.com/blog/834121
近期對 Tomcat 的一些原理機制產生了興趣,於是便下載源碼進行 DEBUG 來一探究竟~
TOMCAT_6_0_18.zip 包: http://pan.baidu.com/s/1mgGcPug
下載解壓後的目錄結構:
很明顯它是基於 ANT 來構建,直接通過
Eclipse -> New -> Java Project form Existing Ant Buildfile 直接選擇 TOMCAT_6_0_18下面的 build.xml 檔案,
然後在列出來的 task 中的 target 選擇 complie 即可匯入工程。
還沒有完,他的編譯還依賴了四個 jar 檔案,分別是:
ant.jar、 jaxrpc.jar 、org.eclipse.jdt.core_3.8.3.v20130121-145325.jar、wsdl4j-1.5.1.jar,需要將這四個 jar 檔案引入進去。
OK了,接下來直接在Eclipse 中的 Debug Configurations 中加入一個啟動 Tomcat 的 Appliction.
具體在 Java Application 中加入Main啟動項,選擇剛才匯入的 Tomcat 6.0項目(實際名字Bootstrap),
Main class 填寫 org.apache.catalina.startup.Bootstrap 啟動類,
Arguments :
在 Program arguments 填寫 start ,
在 VM arguments 中填寫 tomcat home 的路徑(源碼路徑),如:-Dcatalina.home="E:\tomcat-src\TOMCAT_6_0_18"。
如所示:
配置好後,直接 Apply 並且 Debug,這時候直接啟動會出現如下異常:---此段本人沒有測試
Java代碼
- java.lang.ClassNotFoundException: listeners.ContextListener
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
原因是因為在 tomcat 中的 webapps 中有一個 example 的 webapp, 在這個 app 的 web.xml 配置了 listeners.ContextListener 的監聽,而這個類在它 classpath 中不存在。解決辦法是將 example 直接刪除,反正也不影響 debug。
至此已經完成了 Tomcat 的部署,接下來要去開始 DEBUG了~ ........
Eclipse 下調試Tomcat6源碼(轉)