源碼地址:https://gitee.com/archguide/tomcat
源碼克隆下來后,不能直接運行,需要用ant進行編譯,主要目的是下載依賴
在用ant編譯之前,建議先修改build.properties.default文件中的base.path的值,ant編譯時需要去下載第三方jar包,base.path將指定這些jar存放的位置。
修改完成后,在源碼目錄下使用命令行執行ant ide-intellij進行編譯。執行命令后需要等待一段時間。
執行成功后在工程目錄結構中多出一個文件夾,該文件夾保存了Tomcat源碼所依賴的jar。
我們要把該文件夾下的jar加入到classpath中去,進入到Project Structure。把下載的依賴添加進來。
3. 依賴添加進來后,可以嘗試使用IDEA構建工程了。
構建過程中可能會報錯,比如:
該modules下的幾個模塊都是maven工程,右鍵pom.xml文件點擊Add as Maven Project,點擊后會自動下載依賴,從而解決構建報錯,其他模塊也類似。
對三個模塊都下載依賴后,重新構建后,可能會報如下錯誤:
提示ant包不存在,需要引入ant.jar的依賴,還是一樣,打開Project Structure,選擇tomcat Module,添加依賴,將ant.jar添加進來,這里需要注意,Tomcat默認用的是ant-1.9.8.jar,所以可以提前把這個jar下載在電腦上,然后引入此jar。
但是Apply的時候,會提示:
這個我也不知道怎么辦了...,解決辦法是,將ant-1.9.8.jar保存在tomcat-build-jars文件夾下,然后右鍵該jar,點擊Add as Library。
點擊ok,可以繞過剛剛的錯誤。重新構建,仍然會報錯:
將@VERSION@改成9即可,再次重新構建,構建沒有問題了。
如果構建后沒有報錯,但是下圖的這個Java文件中還是報紅色,這應該是IDEA的問題,只需要手動的使用IDEA的快捷提示重新import一下依賴即可。
4. 構建成功后,運行源代碼。
Tomcat的啟動類是org.apache.catalina.startup.Bootstrap類。直接運行此類中的Main方法可以看到Tomcat的啟動日志。
但是我的機器上有亂碼,Tomcat做了國際化.
增加運行參數:-Duser.language=en。
增加之后再運行就沒有問題了。
但是此時訪問localhost:8080,仍然會報錯,看不到我們想看到的熟悉的Tomcat歡迎頁
這是因為Tomcat內部使用了SPI機制來初始化jsp相關的東西,手動運行源碼的過程中默認不會去初始化jsp相關。
我們找到
在工程目錄下新建resouces文件夾,然后新建META-INF文件夾,然后將上圖中的services文件夾復制到META-INF文件中,最后將resources文件夾加入到classpath中。
重新運行Bootstrap,訪問正常。