從源代碼構(gòu)建Tomcat的方式
對(duì)于開源軟件,一些用戶喜歡方便的開箱即用,還有一部分用戶則喜歡從源代碼入手,設(shè)置環(huán)境,重新構(gòu)建(build)出來一個(gè)可用的版本,享受這種折騰的過程。
做為開源項(xiàng)目里發(fā)展成熟、用戶眾多的一款開源軟件,Apache Tomcat有許多優(yōu)良的設(shè)計(jì)與架構(gòu),所以更少不了這種「弄臟雙手,從頭折騰」的使用者。
其實(shí)說實(shí)話,如果單純?yōu)榱朔治隽搜芯吭创a,可以下載某一版本的Tomcat以及與之對(duì)應(yīng)的源代碼,即可搭建調(diào)試環(huán)境。這個(gè)之前的文章里寫過一些(怎樣調(diào)試Tomcat源碼)。
但是自己用源代碼構(gòu)建這種方式,相對(duì)來說,你可以隨意在源代碼中修改嘗試,然后打包,此時(shí)再進(jìn)行Remote debug方式的調(diào)試時(shí),代碼行也可以完整的對(duì)應(yīng)上,不會(huì)造成困惑,基本上和在IDE里搭好一個(gè)可以調(diào)試的Project一樣。
本次我們了解從源代碼入手「弄臟雙手,從頭折騰」構(gòu)建一個(gè)Tomcat的過程。
簡明過程:
- 安裝JDK
- 安裝Apache Ant
- 下載Apache Tomcat源代碼
- 編輯Ant使用的構(gòu)建文件(一般默認(rèn)的是build.properites,會(huì)包含在Tomcat源代碼中)
- 下載構(gòu)建需要依賴的庫(其他一些lib)
- 構(gòu)建Tomcat
下面詳細(xì)來看上述這些過程。
安裝JDK
這個(gè)的安裝過程自然不必多說,每個(gè)Java開發(fā)者都在學(xué)語言的***天了解過了。唯一注意的是,不同的Tomcat版本,需要對(duì)應(yīng)不同的JDK,所以如果JDK版本太低可能導(dǎo)致新版本的Tomcat編譯不成功。
安裝Apache Ant
Ant是做什么的呢?編譯安裝過Linux/Unix軟件的用戶都知道m(xù)ake這個(gè)工具。Ant則是Java應(yīng)用的構(gòu)建工具。這里注意Ant的版本也不要不老。安裝過程也和JDK/Maven這些Java工具類似,解壓之后配置ANT_HOME,然后加到Path中使其可執(zhí)行即可。安裝完成命令行執(zhí)行ant –version確認(rèn)安裝是否正確。
下載Tomcat源代碼
可以到github上下載Tomcat源代碼。
也可以在官方的SVN repository去下載,直接選擇具體的版本。
在官網(wǎng)下載發(fā)行包的位置,可以直接下載當(dāng)前***release的Tomcat和源代碼,已歸檔的可以在歸檔文件中下載發(fā)行版和源代碼。
編輯構(gòu)建配置文件
在Tomcat源代碼中,默認(rèn)包含了兩個(gè)Ant要使用到的文件:
- build.properties.default
- build.xml
拷貝build.properties.default文件一份,重命令為build.properties,再修改一下其中的base.path,這里設(shè)置一個(gè)絕對(duì)路徑,用來存放構(gòu)建過程中下載下來的tomcat依賴的第三方庫。
然后再修改build.xml,將其中以下內(nèi)容注釋掉
- <antcalltarget="downloadzip">
- <param name="sourcefile" value="${nsis.loc}"/>
- <param name="destfile" value="${nsis.exe}"/>
- <param name="destdir"value="${nsis.home}/.."/>
- </antcall>
注釋掉的內(nèi)容是因?yàn)槠鋾?huì)在下載依賴時(shí)去獲取一個(gè)nsis.exe的文件,用來生成tomcat在windows平臺(tái)的安裝程序的。我們這里不需要,所以可以在ant的構(gòu)建文件build.xml里把它去掉。否則因?yàn)樽C書的問題,容易出現(xiàn)下面這個(gè)異常
- javax.net.ssl.SSLHandshakeException:
- sun.security.validator.ValidatorException:PKIX path building failed: sun.securi
- ty.provider.certpath.SunCertPathBuilderException:unable to find valid certifica
- tion path to requested target
當(dāng)然解決這個(gè)異常的問題網(wǎng)上也有解決方案,但相比注釋要麻煩一些。
然后在源代碼的根目錄執(zhí)行命令ant,靜待構(gòu)建完成。默認(rèn)會(huì)在源代碼的output目錄下生成一個(gè)build目錄,這個(gè)就是和我們解壓zip獲得的Tomcat一個(gè)樣。
此外,ant命令執(zhí)行中間如果出現(xiàn)ConnectionTimeout這種異常,可以重復(fù)試幾次。
【本文為51CTO專欄作者“侯樹成”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過作者微信公眾號(hào)『Tomcat那些事兒』獲取授權(quán)】