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命令,以下圖所示: 


  此次咱們等的時間較長,由於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/120826php

相關文章
相關標籤/搜索