Tomcat源碼學習(一) 源碼編譯和匯入Eclipse

來源:互聯網
上載者:User
 原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://panpan.blog.51cto.com/489034/120826

  由於現在項目相對比較輕鬆,而且項目是研究SOA和Web Service的,因此這裡我要對一些相關的開源技術做一些研究。接下來我要寫的文章是Tomcat源碼系列的文章,文章(一)是關於Tomcat源碼編譯和如何將Tomcat工程匯入Eclips的,這裡分享一下編譯經驗。
  大家都知道Java的開源項目很強大,正是這些開源項目促進大量優秀的程式員進步和推動軟體的快速發展。瞭解和看過開源項目的程式員不少,但是真正參與進去的程式開發人員就不多了。其實只有真正參與到開源項目中,我們的開發能力就會大大增強,我們的開發人員就會更加優秀、更善於軟體管理,我們的軟體產業也會越做越強。
  我覺得可以用構建和諧社會的一句話來描述開源軟體,那就是:在共用中共建,在共建中共用。好了,不說這麼多了,開始我們的Tomcat源碼之旅了。
 
  1.下載Tomcat源碼

  請先從 [url]http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91[/url]  下載版本控制工具SubVersion,下載到的是svn-win32-1.5.4.zip,解壓後將bin路徑放到環境變數path下,就可以使用這個版本控制工具了。
  在MS-DOS視窗中輸入:svn export [url]http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_18/[/url] F:\project\tomcat\apache-tomcat-6.0.18-src\  這裡我把要下載的源碼放到F盤的這個目錄了。TOMCAT_6_0_18是當前最新的源碼版本。
  該目錄顯示的就是Tomcat源碼目錄,這裡的output目錄和eclipse_output目錄是沒有的,這是我之後編譯產生的目錄。因此大家需要注意。
 
  2.編譯並運行
 
  使用Ant工具進行代碼編譯。從 [url]http://ant.apache.org/bindownload.cgi[/url] 處下載Ant工具。我下載的是apache-ant-1.7.1-bin.zip,解壓後把bin路徑放到環境變數path下就可以使用了。
  把該目錄下的build.properties.default檔案改名為:build.properties。開啟build.properties,找到base.path=/usr/share/java,改為base.path=F:/project/share。F盤下的這個目錄是我本地的存在的目錄,讀者可以設定自己電腦上一個存在的目錄即可。
  在Tomcat編譯過程中,Ant會讓我們下載一些必要的依賴項目,base.path目錄就是用來儲存這些專案檔的,我們可以將這個屬性指向一個已經存在的目錄。修改完base.path後,我們回到MS-DOS視窗,切換到Tomcat原始碼所在目錄,然後運行ant download命令,如所示:

  這次我們等的時間較長,因為eclipse-JDT-3.2.zip大約有20多M,下載需要一段時間。一段時間後,編譯器可能給出幾個警告。這時我們可發現剛才建立的base.path目錄(F:/project/share)中已經下載了6個依賴項目,它們都是Tomcat編譯所必須的。
  下面就開始真正的編譯任務了,請在MS-DOS視窗內鍵入ant並斷行符號,Ant將在2分鐘內編譯1000多個源檔案並將Tomcat部署到output目錄。編譯順利完成後,請開啟Tomcat的原始碼目錄,會發現多了一個output目錄,這是Ant的編譯後的輸出目錄。請開啟Tomcat原始碼的output\build\bin子目錄,雙擊startup.bat檔案,我們即可成功啟動Tomcat6.0,如果不成功,請注意設定環境變數CATALINA_HOME,設定為F:\project\tomcat\apache-tomcat-6.0.18-src\output\build。此時我們的編譯工作就算順利完成了。
  這裡可能會有錯誤出現:
    (1)執行ant download命令時出現錯誤,原因可能是找不到build.properties檔案中的行 jdt.loc=http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.3.1-200709211145/eclipse-JDT-3.3.1.zip 這個包,讀者在網上搜尋到這個包後,把網址換一下即可。不過我用的都是最新的版本,至少在一段時間內都是可用的。
    (2)執行ant命令時出錯,原因有很多。我遇到的錯誤是如下錯誤:

[javac] D:\tomcat\share\tomcat6-deps\dbcp\src\java\org\apache\tomcat\dbcp\db
cp\BasicDataSource.java:43: org.apache.tomcat.dbcp.dbcp.BasicDataSource 不是抽象
的,並且未覆蓋 java.sql.Wrapper 中的抽象方法 isWrapperFor(java.lang.Class<?>)
  [javac] public class BasicDataSource implements DataSource {
  [javac]     ^
  [javac] D:\tomcat\share\tomcat6-deps\dbcp\src\java\org\apache\tomcat\dbcp\db
cp\DelegatingStatement.java:45: org.apache.tomcat.dbcp.dbcp.DelegatingStatement
不是抽象的,並且未覆蓋 java.sql.Statement 中的抽象方法 isPoolable()

    等等一大堆錯誤,這個原因是由於我使用的JDK版本是1.6的,所以會出現這個問題,把JDK版本換成1.5的,把JAVA_HOME也換成1.5版本的JDK即可,這些錯誤就解決了。還有一些警告,不過沒有關係。

    如果讀者在編譯過程中還有其他錯誤和問題,請留言聯絡我。

  3.匯入源碼到Eclipse中

  (1)開啟Eclipse,建立一個Java工程,選擇“Create project from existing source”,匯入現有的代碼工程,如所示:

  點擊“Finish”完成工程建立。
  (2)匯入完成後,會看到一些錯誤提示。右擊工程tomcat,選擇"build Path"->Config Build path ,刪除兩個以TOMCAT_LIBS開頭的兩個庫,保留JRE庫和JUnit庫。
  (3)把ant.jar(剛才下載的ant中的lib裡有)和org.eclipse.jdt.core_3.3.1.v_780_R33x.jar(在剛才設定的F:\project\share中有)copy到代碼工程下的lib檔案夾下(lib檔案夾之前沒有,需要手動建立)。選擇“Config Build path”->"Add library",加入一個User library,把這兩個jar包加進來,命名成tomcat_lib。在Tomcat最新版本6.0.18中,有兩個.java代碼檔案:ServiceProxy.java和ServiceRefFactory.java中用到了一些其他包中的類,如import javax.xml.rpc.Service和import javax.wsdl.Definition等類,這些類分別在包jaxrpc.jar和wsdl4j-1.5.1.jar中,這兩個包都在axis2的lib中,我下載的版本是axis-bin-1_4.zip,是:[url]http://apache.freelamp.com/ws/axis/1_4/axis-bin-1_4.zip [/url] 解壓後在lib目錄可以看到這兩個jar包,直接加入到工程即可。
  添加完成後,如所示:

  (4)運行tomcat:找到tomcat的啟動主類org.apache.catalina.startup包下的Bootstrap類,右擊->“Run AS”->"Run Configurations",在Arguments視窗中做如下設定:
    在Program arguments中寫入:start
    在VM arguments中寫入:-Dcatalina.home="F:\project\tomcat\apache-tomcat-6.0.18-src\output\build" 。如所示:

  然後運行,可以看到tomcat啟動成功,如所示:

  (5)停止tomcat:跟上面步驟一樣,在Program arguments中寫入:stop,點擊運行。即可停止tomcat。

  4.總結

  到此為止,我們的tomcat源碼的兩種編譯方式和匯入Eclipse都已經完成,這裡之所以匯入到Eclipse是為了方便讀代碼,也可以對代碼進行單步調式,看看代碼的執行過程,這是比較有意義的事情。好了接下來的任務就是深入代碼內部了,這是一個令人激動的事情,因為tomcat是一個很優秀的項目,其代碼也很有誘惑力。不說了,我開始欣賞代碼了,以後的文章就會跟大家分享代碼的細節了,還去有興趣讀者關注和一起討論。由於工程比較大,遠遠超過2M,我就不上傳了,有需要的讀者可以留言,我發給大家。

本文出自 “C++技術” 部落格,請務必保留此出處http://panpan.blog.51cto.com/489034/120826

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.