程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Tomcat 8源碼編譯及導入Eclipse中研究

Tomcat 8源碼編譯及導入Eclipse中研究

編輯:關於JAVA

最近因為需求需要修改Tomcat中的某些功能,無奈只能研究那部分源碼然後稍作修改。

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

1. Tomcat8源碼編譯步驟1.1 先到Apache Tomcat 8.0官網下載最新版Source Code Distributions,解壓到某個目錄下,如D:\apache-tomcat-8.0.5-src

1.2 使用ant編譯

(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了。

(2)編譯Tomcat 8.0

非常簡單,cmd進入到剛下載的源碼路徑下,用下面兩個命令即可編譯:

ant download

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

這裡有兩個問題需要注意:

依賴包下載到什麼地方?在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.jartest包裡需要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就可以啟動了

作者:cnblogs Alexia(minmin)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved