Tomcat8源碼編譯及導入Eclipse中研究

最近由於需求須要修改Tomcat中的某些功能,無奈只能研究那部分源碼而後稍做修改。java

目前Tomcat最新版是8.0,下載了源碼包,編譯並導入Eclipse中研究比較方便。
web


1. Tomcat8源碼編譯步驟

1.1 先到Apache Tomcat 8.0官網下載最新版Source Code Distributions,解壓到某個目錄下,如D:\apache-tomcat-8.0.5-srcapache


1.2 使用ant編譯tomcat

(1)安裝ant
服務器

若是機器上已經安裝了ant能夠省略這一步,不然去ant官網下 載最新版ant Binary Distributions,解壓到某個目錄下,如D:\Program Files\apache-ant-1.9.3,而後配置環境變量。要麼新建個ANT_HOME,值爲ant路徑,而後在PATH中添加ant bin路 徑爲%ANT_HOME%/bin,要麼直接在PATH中添加ant bin路徑爲D:\Program Files\apache-ant-1.9.3\bin。配置好後,在cmd下運行ant  -version,若是顯示版本說明配置成功,咱們就能夠隨地使用ant了。dom


(2)編譯Tomcat 8.0eclipse

很是簡單,cmd進入到剛下載的源碼路徑下,用下面兩個命令便可編譯:jsp

ant download
ant

"ant download"命令會下載編譯Tomcat所需的依賴包。maven

這裏有兩個問題須要注意:
測試

  • 依賴包下載到什麼地方?在Linux或MacOX下,會默認下載到 「/usr/share/java」 目錄,固然該目錄普通用戶是沒有權限寫的;在Windows下,默認下載到 "某個磁盤:\usr\share\java" ,這的磁盤多是C、D或其它,這通常取決於你把Tomcat源碼放在哪一個盤了,好比個人放在D盤,默認就下載在 "D:\usr\share\java" 下。若是我想本身定義下載路徑怎麼辦?
  • 若是用戶是經過代理上網的,那麼下載過程當中就會出錯。怎麼解決?

熟悉ant的人應該知道怎麼解決,就是經過配置文件build.properties來 設置。該配置文件在Tomcat源碼路徑下爲 「build.properties.default」 ,咱們能夠去掉.default後綴或直接新建一個build.properties均可以,固然我選擇了前者,將 「build.properties.default」 修改成 「build.properties」 打開, 修改裏面的base.path屬性值爲咱們但願的下載路徑並添加proxy代理配置,格式以下:

# ----- Proxy setup -----
# Uncomment if using a proxy server
proxy.host=proxy.domain
proxy.port=8080
proxy.use=on

# ----- Default Base Path for Dependent Packages -----
# Replace this path with the directory path where dependencies binaries
# should be downloaded
base.path=/home/me/some-place-to-download-to

根據本身的須要進行設置,注意若是不須要某項設置須要用#註釋掉。

依賴包下載成功後(若是下載失敗能夠多試幾回),執行ant便可編譯,編譯成功後當前路徑下回多出個output文件夾,就是咱們的編譯結果。


附:

①若是你修改了部分源碼,須要從新編譯 ,直接進入到源碼路徑,執行ant命令便可。

②若是須要編譯servlet和jsp API文檔,進入到源碼路徑下執行以下命令:

ant -f dist.xml dist-javadoc

③若是須要編譯extras擴展功能(commons-logging, webservices etc.),進入到源碼路徑下執行以下命令:

ant -f extras.xml

④若是須要編譯成release版本,進入到源碼路徑下執行以下命令:

ant -f dist.xml release

 

2. 將Tomcat源碼導入到Eclipse中研究

因爲Tomcat不是Eclipse管理的項目,所以不能直接導入,須要新建一個Java項目,好比爲Tomcat8,這時有兩種方法就源碼導入進來。

第一種:將所須要的源碼包java和test(Junit測試用例,可選)兩個文件夾直接拷貝到src下。

第二種:選擇File - > import -> File System,在From directory中選擇tomcat源碼包中的java和test兩個文件夾,在Into folder中選擇咱們剛新建的Tomcat8項目,Finish,而後記得將這兩個文件夾標記爲source code(怎麼標記?右鍵選擇者文件夾 -> Build Path -> Use as Source Folder)。

固然這樣事後就不是完事了,這時會發現整個項目不少紅叉,也就是缺乏依賴包,在Build Path里加上下面的幾個依賴包便可:

Java包須要下面四個jar包,注意版本可能不同:

ant.jar
jaxrpc.jar
org.eclipse.jdt.core_3.8.3.v20130121-145325.jar
wsdl4j-1.5.1.jar

test包裏須要junit.jar,直接「Add Libraries...」選擇Junit便可:

junit.jar

固然也能夠在Eclipse中啓動Tomcat,方法以下:

找到類:org.apache.catalina.startup.Bootstrap.java,從名字上也能夠看出是啓動類,若是你此時直接運行該類,會報以下錯誤:

Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:\workspace\Tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:\workspace\Tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:\workspace\Tomcat8\conf\server.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:\workspace\Tomcat8\conf\server.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina start
SEVERE: Cannot start server. Server instance is not configured.

說沒有配置服務器實例,從警告語句能夠知道緣由:當前項目路徑下沒有lib和conf這兩個文件夾,從而找不到服務器配置文件server.xml,固然也就不能實例化服務器了。

解決方法有兩個:

①將這兩個文件夾直接拷貝到項目工程下

那麼這兩個文件夾在哪?去Tomcat源碼路徑裏咱們能夠看到只有conf配置文件夾沒有lib文件夾,其實這也是我編譯Tomcat的緣由:lib在編譯後的output文件夾中的build文件夾裏,conf這裏也有。固然你也能夠直接從官網下載二進制包,裏面是編譯好的Tomcat,根路徑就有這兩個文件夾。將build下面的conf和lib文件夾直接拷貝到項目裏,再次運行,啓動成功。

Apr 02, 2014 3:37:58 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;D:\Program Files\Gow\bin;D:\Program Files\Visual Leak Detector\bin\Win32;D:\Program Files\Visual Leak Detector\bin\Win64;D:\Program Files\Java\jdk1.7.0_51\\bin;D:\Program Files\apache-maven-3.2.1\bin;D:\Program Files\Git\cmd;.
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2254 ms
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/@VERSION@
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Apr 02, 2014 3:38:00 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/29  config=null
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 386 ms

②添加VM虛擬機運行參數

第二種方法就是添加VM參數,指定這兩個文件夾的具體路徑,用VM的-D參數指定catalina.home屬性值爲具體的路徑,具體方法以下:

Run as -> Run Configuration... - > Arguments -> VM arguments中設置:

-Dcatalina.home="D:/apache-tomcat-8.0.5-src/output/build"

而後Run就能夠啓動了。

相關文章
相關標籤/搜索