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

 由於現在項目相對比較輕鬆,而且項目是研究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命令,如下圖所示: 

注:F:/project/share這個路徑中別加入中文會報錯。  

這次我們等的時間較長,因爲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,我就不上傳了,有需要的讀者可以留言,我發給大家。


轉自:http://panpan.blog.51cto.com/489034/120826/

發佈了24 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章