編譯Tomcat9源碼

參考:http://tomcat.apache.org/tomcat-9.0-doc/building.html

1.下載JDK8

安裝JDK8

編譯Tomcat9需要安裝JDK8
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

設置環(huán)境變量:

JAVA_HOME
D:\dev\Java\jdk1.8.0_72
PATH新增:%JAVA_HOME%\bin

2.安裝Ant1.9.5或者更高版本

下載地址:http://ant.apache.org/bindownload.cgi

解壓到D:\dev\ant

設置環(huán)境變量:

ANT_HOME
D:\dev\ant\apache-ant-1.9.6
PATH新增:%ANT_HOME%\bin

3.獲取Tomcat9的源碼

地址:http://archive.apache.org/dist/tomcat/tomcat-9/
下載是windows版的源碼即zip版的源碼:apache-tomcat-9.0.0.M17-src.zip

然后將其解壓到一個目錄下(D:\dev\workspace)其弊,即源碼所在目錄是:D:\dev\workspace\apache-tomcat-9.0.0.M17-src膨更。

4.配置下載區(qū)域

編譯Tomcat要下載大量的依賴庫双饥。強烈推薦為這些庫配置下載區(qū)域。
進入tomcat源碼的目錄液茎,
即D:\dev\workspace\apache-tomcat-9.0.0.M17-src,

將其中的build.properties.default文件重命名為build.properties免钻,
并修改base.path為:
base.path=D:/dev/workspace/apache-tomcat-9.0.0.M17-src/../lib-tomcat9

5.編譯Tomcat

${tomcat.source}表示tomcat源碼所在目錄致盟。
cd ${tomcat.source}
ant


cd D:\dev\workspace\apache-tomcat-9.0.0.M17-src
ant

運行這條命令將要下載編譯Tomcat所需要的庫文件到base.path指定的目錄中。
一旦編譯成功匾南,一個可用的Tomcat將會被產(chǎn)生在${tomcat.source}/output/build目錄中,且能夠被腳本啟動和關(guān)閉蛔外。

6.使用Eclipse編譯

(1)生成Eclipse項目

Ant的target 提供一種便捷下載所有二進制依賴關(guān)系蛆楞,和在源代碼樹的根目錄下創(chuàng)建Eclipse項目及classpath文件。
cd ${tomcat.source}
ant ide-eclipse

即:
cd D:\dev\eclipse\workspace\tomcat
ant ide-eclipse

(2)增加Classpath變量

啟動Eclipse夹厌,打開Preferences對話框豹爹,選擇Java->Build Path->Classpath Variables,增加兩個Classpath Variables:

TOMCAT_LIBS_BASE:

D:/dev/workspace/apache-tomcat-9.0.0.M3-src/../lib-tomcat9
(路徑和在build.properties中的base.path設置一樣矛纹,即存放的是已經(jīng)下載的二進制依賴)

ANT_HOME:

D:\dev\ant\apache-ant-1.9.6
(Ant的根目錄)

(3)配置JRE:

打開Preferences對話框臂聋,
選擇Java->Installed JREs->Add。選擇JRE Home:D:\dev\Java\jdk1.8.0_72或南;
選擇Java -> Compiler孩等,設置Compiler compliance level 等于當前JDK的版本(1.8),默認一般是最新版本采够。

單擊OK肄方,設置完成。

(4)導入Tomcat源碼到Eclipse中

File->Import->General->Existing Projects into Workspace->選擇Tomcat源碼的根目錄蹬癌,單擊完成即可導入权她。
導入完成之后,項目自動完成編譯逝薪。

(5)啟動

在Eclipse中找到org.apache.catalina.startup.Bootstrap隅要,使用它作為主類,選中右擊“Run As->Run configurations”董济,然后雙擊”Java Aplication”就會出來一個新的”Bootstrap”:
進行如下設置:
Name:Bootstrap start
Project:apache-tomcat-9.0.0.M17-src
Main class(Search而來):org.apache.catalina.startup.Bootstrap

Program arguments:start
VM arguments:-Dcatalina.home="D:\dev\workspace\apache-tomcat-9.0.0.M17-src\output\build"

單擊Apply步清,即可保存設置
接著單擊Run,Tomcat即可啟動虏肾。

打開瀏覽器尼啡,輸入http://127.0.0.1:8080/examples/ 看看例子暂衡。

(6)停止

與(5)同樣的方法設置Bootstrap stop,不同之處在于Program arguments:stop

(7)調(diào)試Tomcat源碼的方法
選中org.apache.catalina.startup.Bootstrap崖瞭,單擊右鍵Debug As->Debug configurations

7.簡單的源代碼閱讀指南

包名 用途
javax servlet/jsp/el相關(guān)的api
org.apache.catalina tomcat自身架構(gòu)
org.apache.coyote http狂巢、ajp協(xié)議實現(xiàn)相關(guān)的類
org.apache.el 實現(xiàn)el規(guī)范
org.apache.jasper 實現(xiàn)jsp規(guī)范、編譯jsp文件
org.apache.juli tomcat的日志系統(tǒng)
org.apache.naming jndi實現(xiàn)
org.apache.tomcat tomcat的工具包书聚、net唧领、digester xml解析器

閱讀順序:
可以從org.apache.catalina.startup.Bootstrap這個類開始看起,
然后到org.apache.catalina.startup.Catalina,
在Catalina類中會觸發(fā)conf/server.xml文件的解析雌续,
這時要看org.apache.tomcat.util.digester中的類斩个,
解析的過程中會用到org.apache.catalina.startup包中的很多RuleSet類,
server.xml文件解析完后驯杜,會生成org.apache.catalina.core包中的各種StandardXXX類的實例受啥,
比如StandardServer、StandardService鸽心、StandardEngine等等滚局,
這些Standard組件都是有生命周期的,接著會調(diào)用他們的init顽频、start等方法藤肢,
會觸發(fā)下面這些組件進入init、start狀態(tài)
org.apache.catalina.connector.Connector
org.apache.coyote.http11.Http11Protocol
org.apache.tomcat.util.net.JIoEndpoint
在JIoEndpoint(或NioEndpoint糯景、AprEndpoint)中會監(jiān)聽8080這樣的端口嘁圈,
有請求進來了,就進行相關(guān)的io操作蟀淮,接著轉(zhuǎn)到org.apache.coyote包中的相應類進行協(xié)議解析最住,
生成org.apache.catalina.connector.Request和org.apache.catalina.connector.Response實例,
然后轉(zhuǎn)到各種Valve怠惶、應用Filter温学,最后到達應用的Servlet/JSP。

下圖描述了Tomcat7的核心架構(gòu):

Tomcat7核心架構(gòu)圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甚疟,一起剝皮案震驚了整個濱河市仗岖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌览妖,老刑警劉巖轧拄,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讽膏,居然都是意外死亡檩电,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俐末,“玉大人料按,你說我怎么就攤上這事∽矿铮” “怎么了载矿?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烹卒。 經(jīng)常有香客問我闷盔,道長,這世上最難降的妖魔是什么旅急? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任逢勾,我火速辦了婚禮,結(jié)果婚禮上藐吮,老公的妹妹穿的比我還像新娘溺拱。我一直安慰自己,他們只是感情好谣辞,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布迫摔。 她就那樣靜靜地躺著,像睡著了一般潦闲。 火紅的嫁衣襯著肌膚如雪攒菠。 梳的紋絲不亂的頭發(fā)上迫皱,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天歉闰,我揣著相機與錄音,去河邊找鬼卓起。 笑死和敬,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的戏阅。 我是一名探鬼主播昼弟,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奕筐!你這毒婦竟也來了舱痘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤离赫,失蹤者是張志新(化名)和其女友劉穎芭逝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渊胸,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡旬盯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖翰。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡接剩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萨咳,到底是詐尸還是另有隱情懊缺,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布某弦,位于F島的核電站桐汤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏靶壮。R本人自食惡果不足惜怔毛,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腾降。 院中可真熱鬧拣度,春花似錦、人聲如沸螃壤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奸晴。三九已至冤馏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寄啼,已是汗流浹背逮光。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墩划,地道東北人涕刚。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像乙帮,于是被迫代替她去往敵國和親杜漠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容