欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2118|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Tomcat源代碼編譯和導(dǎo)入Eclipse

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-5 18:01 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
作為一位Java程序員,如果您沒(méi)有接觸過(guò)開(kāi)源軟件、項(xiàng)目或框架的話,恐怕有些不可思議。轟轟烈烈的開(kāi)源運(yùn)動(dòng)起源于Linux操作系統(tǒng),Apache基金會(huì)在其中扮演了中流砥柱的角色,業(yè)界巨擘SUNIBM BEA Oracle等公司的積極參與,使得聲勢(shì)浩大的開(kāi)源運(yùn)動(dòng)成為軟件開(kāi)發(fā)領(lǐng)域勢(shì)不可擋的力量。200111月,IBMApache基金會(huì)捐獻(xiàn)出Visual Age for Java,這個(gè)看似窮途末路的產(chǎn)品經(jīng)眾多高手的改造,演變?yōu)檩x煌一時(shí)的Eclipse,直接擊敗了不開(kāi)源的JBuilder,讓做編譯器起家的Borland公司幾乎關(guān)張大吉。Eclipse這個(gè)產(chǎn)品如此經(jīng)典,以至于微軟的Visual Studio都得向它學(xué)習(xí)。在Apache Harmony的圍追堵截下,Java的發(fā)明者Sun公司一看勢(shì)頭不妙,于2006年宣布Java開(kāi)源,隨后又公開(kāi)了其旗艦級(jí)產(chǎn)品Solaris的源代碼。今年1月,開(kāi)源的死對(duì)頭、冷酷自私的微軟也不得不在MS-RL協(xié)議下公開(kāi).Net的源代碼。但是,在這如火如荼的開(kāi)源運(yùn)動(dòng)中,我們中國(guó)的程序員又有多少貢獻(xiàn)呢,我們開(kāi)創(chuàng)了哪些框架、項(xiàng)目和產(chǎn)品,為開(kāi)源界添磚加瓦呢?以筆者短淺的目光看來(lái),我們對(duì)開(kāi)源界貢獻(xiàn)的東西恐怕很少,能夠與國(guó)外經(jīng)典開(kāi)源項(xiàng)目一較高下的,少之又少矣!

作為一名中國(guó)的程序員,咱們能沒(méi)有遺憾嗎?為什么經(jīng)典的Apache Web Server不是中國(guó)人寫(xiě)的;為什么Linus Torvalds在大學(xué)時(shí)代就寫(xiě)出Linux并振臂一呼,應(yīng)者云集;為什么JBoss能與巨無(wú)霸式的Websphere相抗衡;為什么MySQL能在OracleSQL Server的夾擊下發(fā)展并壯大…… ?如此等等問(wèn)題,在遺憾之余,我想我們應(yīng)該花點(diǎn)時(shí)間好好思考一下,中國(guó)的軟件產(chǎn)業(yè)怎么了,中國(guó)的程序員又怎么啦?


在筆者看來(lái),我們的程序員對(duì)開(kāi)源的理解是相當(dāng)狹隘的。國(guó)學(xué)大師王國(guó)維曾說(shuō)過(guò),古往今來(lái)成大學(xué)問(wèn)大事業(yè)者要經(jīng)歷三種境界,“昨夜西風(fēng)凋碧樹(shù),獨(dú)上高樓,望盡天涯路”,這是第一重境界,迷惘也;“衣帶漸寬終不悔,為伊消得人憔悴”,苦苦求索之境界也;第三重境界為“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處”,經(jīng)歷多少次的失敗和挫折后,終于參透真諦,領(lǐng)悟真理。我覺(jué)得開(kāi)源也有三重境界:


首先,我們要敞開(kāi)心胸,擁抱開(kāi)源(
Open to Open Source)。這重境界我們大家都能做到,拿來(lái)主義嘛,誰(shuí)人不會(huì)。當(dāng)我們的項(xiàng)目需要數(shù)據(jù)庫(kù)時(shí),就去下載一個(gè)免費(fèi)MySQL;需要IDE時(shí),去下載 Eclipse;需要版本控制工具時(shí),就去下載CVS;需要寫(xiě)搜索引擎時(shí),Lucene可能是我們的最?lèi)?ài);當(dāng)我們開(kāi)發(fā)J2EE Web應(yīng)用時(shí),Struts/JSF加Hibernate/iBATIS再加上Spring或許成為我們的首選架構(gòu)。但是,我們絕大部分程序員都停留在這 個(gè)層次上,大家下載之后,看看文檔介紹,安裝、配置并能運(yùn)行,就以為萬(wàn)事大吉,一切順利。偶爾遇到一些問(wèn)題,去Google一搜,答案立馬可得。

其次,我們要深入開(kāi)源,了解開(kāi)源(
Dig into Open Source)。要達(dá)到這個(gè)層次,就有些難度了。我們不但要知其然,還要知其所以然。“知其所以然”的最好辦法就是下載源代碼,仔細(xì)研讀,揣摩并領(lǐng)會(huì)源代 碼的精義,看看這些經(jīng)過(guò)諸多高手修改的源代碼究竟藏有什么玄機(jī),我們能從其中學(xué)習(xí)到哪些設(shè)計(jì)思想及設(shè)計(jì)模式,能復(fù)用其中哪些源代碼,人家運(yùn)用了哪些軟件管 理思想把這些來(lái)自世界各地程序員的勞動(dòng)匯集成一個(gè)產(chǎn)品,代碼架構(gòu)如何,軟件配置管理又是怎樣進(jìn)行的……,等等等等,我們從源代碼中學(xué)習(xí)的東西太多了。在閱 讀源代碼時(shí),我們要多問(wèn)自己幾個(gè)為什么,這樣就會(huì)收獲更多。

再次,我們要融入開(kāi)源,貢獻(xiàn)開(kāi)源(
Get involved in Open Source)。當(dāng)我們徹底理解該項(xiàng)目源代碼后,我們應(yīng)發(fā)揮一下“人人為我,我為人人”的思想,或結(jié)合您的實(shí)際需要,或結(jié)合您的新想法,或針對(duì)Mail lists上的問(wèn)題,對(duì)該開(kāi)源項(xiàng)目加以改進(jìn)和創(chuàng)新,并把自己的代碼貢獻(xiàn)出來(lái),讓大家評(píng)估。當(dāng)然,如果您有好的想法,您完全可以創(chuàng)建自己的開(kāi)源項(xiàng) 目,Apache基金會(huì)中眾多的開(kāi)源項(xiàng)目不都是我們廣大程序員一手創(chuàng)建的嗎?但是,在創(chuàng)建新開(kāi)源項(xiàng)目時(shí),切忌不要重新發(fā)明輪子。

筆者才疏學(xué)淺,想以
Apache Jakarta項(xiàng)目包中的核心項(xiàng)目Tomcat為例,希望通過(guò)閱讀源碼,能從這個(gè)經(jīng)典項(xiàng)目中學(xué)到更多的東西,為我們中國(guó)的開(kāi)源事業(yè)起到拋磚引玉的作用。

下面我們就開(kāi)始我們的
Tomcat源碼學(xué)習(xí)之旅。

1. 下載
Tomcat6.0的源代碼

首先,我們得下載Tomcat6.0的源代碼。Tomcat源代碼的版本控制工具不是CVS,而是Subversion,如果您的機(jī)器上沒(méi)有安裝Subversion,請(qǐng)從
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 下載并安裝這個(gè)開(kāi)源的版本控制工具。當(dāng)然,如果您想從Eclipse中直接導(dǎo)入Tomcat源代碼,請(qǐng)從http://subclipse.tigris.org/update_1.0.x下載Subversion插件,即可導(dǎo)入Tomcat源代碼。安裝完成后,請(qǐng)?jiān)?/font>MS-DOS窗口中鍵入svn export help,您將會(huì)看到:

C:\Documents and Settings\carlwu>svn help export

export: 產(chǎn)生一個(gè)無(wú)版本控制的目錄樹(shù)副本。

用法: 1export [-r REV] URL[@PEGREV] [PATH]

2export [-r REV] PATH1[@PEGREV] [PATH2]

1、從 URL 指定的倉(cāng)庫(kù),導(dǎo)出一個(gè)干凈的目錄樹(shù)到 PATH。如果有指定

REV 的話,內(nèi)容即為該版本的,否則就是 HEAD 版本。如果 PATH

被省略的話,URL的最后部份會(huì)被用來(lái)當(dāng)成本地的目錄名稱(chēng)。

2、在工作副本中,從指定的 PATH1 導(dǎo)出一個(gè)干凈的目錄樹(shù)到 PATH2。如果

有指定 REV 的話,會(huì)從指定的版本導(dǎo)出,否則從工作副本導(dǎo)出。如果

PATH2 被省略的話,PATH1 的最后部份會(huì)被用來(lái)當(dāng)成本地的目錄名稱(chēng)。

如果沒(méi)有指定 REV 的話,所有的本地修改都保留,但是未納入版本控制

的文件不會(huì)被復(fù)制。



如果指定了 PEGREV ,將從指定的版本本開(kāi)始查找。

有效選項(xiàng):。。。。。。

我們看到Subversion給我們提供了非常友好的幫助,并且是中文的,看來(lái)中國(guó)程序員對(duì)這個(gè)開(kāi)源項(xiàng)目有所貢獻(xiàn)。接下來(lái),請(qǐng)?jiān)?/font>MS-DOS下鍵入:

svn export http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_0/ D:\carl_wu\tomcat\src\

這個(gè)命令的意思是把Tomcat6.0的源代碼從Subversion庫(kù)中導(dǎo)入到本機(jī)的D:\carl_wu\tomcat\src\目錄,命令運(yùn)行后,您稍等幾分鐘,就會(huì)看到Tomcat的源代碼順利導(dǎo)入到目標(biāo)目錄。下面是源代碼的目錄機(jī)構(gòu),從這個(gè)目錄結(jié)構(gòu)中,我們可以看出該項(xiàng)目的開(kāi)發(fā)者使用的IDEEclipse,因?yàn)槲覀兛吹搅耸煜さ?/font>.project.classpath文件。如果您打算開(kāi)發(fā)一個(gè)Stand aloneJava應(yīng)用程序,不妨借鑒一下Tomcat的目錄結(jié)構(gòu),把腳本文件放在bin目錄,將xmlproperties配置文件放在conf目錄中,把Java源碼文件放在java或者src目錄中,資源文件比如說(shuō)圖片文件,ini文件及其它的一些靜態(tài)資源文件可以放在res目錄,測(cè)試源代碼可以放在test目錄中。這是一個(gè)典型的Java應(yīng)用程序的目錄機(jī)構(gòu),筆者以前曾接觸到一個(gè)來(lái)自美國(guó)的產(chǎn)品,其源代碼目錄結(jié)構(gòu)和Tomcat及其相像。






2. 編譯并運(yùn)行

代碼下載后,我們接下來(lái)就是要編譯并運(yùn)行Tomcat。一提編譯,我們不禁會(huì)想到可愛(ài)的Ant。不錯(cuò),Tomcat正是以Ant作為編譯工具,如果您還沒(méi)有安裝,請(qǐng)從http://ant.apache.org/bindownload.cgi 處下載并安裝它。然后,請(qǐng)從Tomcat的源代碼文件找到build.properties.default文件,并將該文件復(fù)制到build.properties,然后打開(kāi)build.properties,找到下面這行:

base.path=/usr/share/java

將它改為:

base.path= D:/carl_wu/tomcat/share

Tomcat編譯過(guò)程中,Ant會(huì)讓我們下載一些必要的依賴(lài)項(xiàng)目,base.path目錄就是用來(lái)保存這些項(xiàng)目文件的,我們可以將這個(gè)屬性指向一個(gè)已經(jīng)存在的目錄。修改完base.path后,我們回到MS-DOS窗口,切換到Tomcat源代碼所在目錄,然后運(yùn)行ant download命令,如下圖所示:





一分鐘未到,Ant就告訴我們一個(gè)錯(cuò)誤并提示我們編譯失敗,具體錯(cuò)誤信息如下:

downloadzip:

[get] Getting: http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip
[get] To: D:\carl_wu\tomcat\share\file.zip
[get] Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-aachen.de:3080/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip

[get] Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-aachen.de:3080/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip

[get] Error opening connection java.io.FileNotFoundException: http://sunsite.informatik.rwth-aachen.de:3080/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip

[get] Can't get http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip to D:\carl_wu\tomcat\share\file.zip

BUILD FAILED

D:\carl_wu\tomcat\src\build.xml:554: The following error occurred while executing this line:

D:\carl_wu\tomcat\src\build.xml:514: Can't get http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip to D:\carl_wu\tomcat\share\file.zip

Total time: 41 seconds

這個(gè)編譯錯(cuò)誤非常簡(jiǎn)單,就是找不到http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip 文件。有人可能會(huì)想,Tomcat的編譯和EclipseJDT有什么關(guān)系?其實(shí)不然,Tomcat是在Eclipse下開(kāi)發(fā)的,所以需要EclipseJDTJava Development tooling)插件來(lái)編譯Tomat源代碼。既然找不到,我們只好自己動(dòng)手,上Google一搜,馬上發(fā)現(xiàn)這個(gè)文件的有效下載地址為:http://mirror.calvin.edu/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip。我們打開(kāi)剛才的build.properties文件,將其34行修改為:

jdt.loc= http://mirror.calvin.edu/eclipse/downloads/drops/R-3.2-200606291905/eclipse-JDT-3.2.zip

修改保存build.properties文件后,重新開(kāi)始ant download任務(wù)。這次我們等的時(shí)間較長(zhǎng),因?yàn)?/font>eclipse-JDT-3.2.zip大約有19M,下載需要一段時(shí)間。我們可乘此機(jī)會(huì)去泡杯茶弄點(diǎn)咖啡什么的,等我們品茶回來(lái),發(fā)現(xiàn)敬業(yè)的螞蟻Ant告訴我們編譯成功,雖然編譯器給出幾個(gè)警告。這時(shí)我們可發(fā)現(xiàn)剛才創(chuàng)建的base.path目錄(D:\carl_wu\tomcat\share)中已經(jīng)下載了6個(gè)依賴(lài)項(xiàng)目,它們都是Tomcat編譯所必須的。

下面就開(kāi)始真正的編譯任務(wù)了,請(qǐng)?jiān)?/font>MS-DOS窗口內(nèi)鍵入ant并回車(chē),Ant將在2分鐘內(nèi)編譯1000多個(gè)源文件并將Tomcat部署到output目錄。編譯順利完成后,請(qǐng)打開(kāi)Tomcat的源代碼目錄,會(huì)發(fā)現(xiàn)多了一個(gè)output目錄,這是Ant的編譯后的輸出目錄。請(qǐng)打開(kāi)Tomcat源代碼的output\build\bin子目錄,雙擊startup.bat文件,我們即可成功啟動(dòng)Tomcat6.0,此時(shí)我們的編譯工作就算順利完成了。


3. 導(dǎo)入源代碼到Eclipse

3.1 請(qǐng)打開(kāi)Eclipse,新建一個(gè)Java項(xiàng)目,然后點(diǎn)擊“Next”按鈕,請(qǐng)選擇“Create project from existing source”, 并在Directory文本框內(nèi)填入我們剛才下載的Tomcat源代碼目錄(i.e. D:\carl_wu\tomcat\src),然后點(diǎn)擊“Next”直至結(jié)束。




3.2 我們將會(huì)看到Eclipse拒絕編譯,這是因?yàn)?/font>Eclipse找不到該項(xiàng)目指定的庫(kù)文件。請(qǐng)右擊該項(xiàng)目,在彈出菜單中選擇“PropertiesàLibraries”,然后刪除兩個(gè)以TOMCAT_LIBS開(kāi)頭的兩個(gè)庫(kù)文件,只保留一個(gè)JRE庫(kù)文件,然后點(diǎn)擊“OK”按鈕,這時(shí)Eclipse開(kāi)始編譯Tomcat源代碼,但是發(fā)現(xiàn)一堆錯(cuò)誤,這是因?yàn)槲覀儧](méi)有為該項(xiàng)目添加編譯所必須的Jar包。

3.3 準(zhǔn)備好Tomcat項(xiàng)目所必須的jar文件,其實(shí),剛才我們運(yùn)行ant download任務(wù)時(shí),已經(jīng)下載過(guò)這些jar文件包。

ant.jar (請(qǐng)?jiān)?/font>ant安裝目錄的lib子目錄中拷貝)

commons-collections-3.1.jar (從剛才Ant下載的commons-collections-3.1子目錄中拷貝)

commons-dbcp-1.2.1.jar(從剛才Ant下載的commons-dbcp-1.2.1子目錄中拷貝)

commons-logging-1.1.jar(如果您本機(jī)沒(méi)有這個(gè)jar包,請(qǐng)從http://commons.apache.org/downloads/download_logging.cgi處下載)

commons-pool-1.2.jar(從剛才Ant下載的commons-pool-1.2子目錄中拷貝)

org.eclipse.jdt.core_3.2.0.v_671.jar(從剛才Ant下載的eclipse\plugins子目錄中拷貝)

3.4 當(dāng)我們準(zhǔn)備好這些jar文件后,將這些文件拷貝到某一目錄(比如說(shuō)D:\carl_wu\tomcat\tomcat_lib目錄),然后在Eclipse中新建一個(gè)User Libraries,我們將這個(gè)新建的User Libraries命名為TOMCAT_LIBS,并把這些文件加到TOMCAT_LIBS。然后將我們新建的TOMCAT_LIBS添加到Tomcat6項(xiàng)目。另外,別忘了把JUnit庫(kù)也加到Tomcat6項(xiàng)目。這時(shí)Eclipse開(kāi)始重新編譯,編譯過(guò)程順利通過(guò),所有錯(cuò)誤均消失,此時(shí)Tomcat6項(xiàng)目的目錄結(jié)構(gòu)如下:





還有,請(qǐng)把test目錄也加入到源代碼中,方法是在Eclipse中右擊”test”目錄,然后在彈出菜單中選擇“Build path”à”Use as Source Folder”,之后我們會(huì)看到test目錄上就多了個(gè)源代碼的符號(hào),如上圖所示。

3.5Eclipse中運(yùn)行Tomcat。請(qǐng)找到Tomcat的啟動(dòng)主類(lèi)org.apache.catalina.startup.Bootstrap,右擊這個(gè)類(lèi),在彈出菜單中選擇“Run As…”à”O(jiān)pen Run Dialog…”,然后在彈出的“Run”窗口中填入程序運(yùn)行參數(shù)“start”JVM運(yùn)行參數(shù)catalina.home,如下面窗口所示:




然后點(diǎn)擊“Run”按鈕,我們將會(huì)看到Tomcat正常啟動(dòng)。恭喜,咱們的Tomcat源碼已經(jīng)成功導(dǎo)入Eclipse,這時(shí),可視化的UML分析工具及Debug工具就能派上用場(chǎng)了。

3.5 調(diào)試Tomcat,請(qǐng)打開(kāi)org.apache.jasper.compiler.Compiler類(lèi)的源代碼,在generateJava()方法的第一行打一個(gè)斷點(diǎn),然后在Eclipse的調(diào)試狀態(tài)下運(yùn)行Tomcat,等Tomcat運(yùn)行后,打開(kāi)我們的瀏覽器,在地址欄中輸入http://localhost:8080/examples/jsp/jsp2/el/basic-comparisons.jsp并回車(chē),然后我們可觀察到Eclipse此時(shí)切換至調(diào)試視圖:







上面的小實(shí)驗(yàn)表明我們可以在Eclipse中通過(guò)Debugger觀察Tomcat的內(nèi)部運(yùn)行機(jī)理。另外補(bǔ)充一點(diǎn),上面的generateJava方法是將jsp動(dòng)態(tài)編譯至java class,這個(gè)方法只是在第一次請(qǐng)求或者Jsp源碼發(fā)生變化時(shí)執(zhí)行,如果您再次在瀏覽器中發(fā)送同樣的請(qǐng)求,您將看不到上圖的Debug界面,因?yàn)樵摲椒ú辉賵?zhí)行。

另外,還有一點(diǎn)很有意思。Tomcat6以前版本的源代碼分散在好幾個(gè)子項(xiàng)目中,他們分別叫做jakarta-servletapi-5jakarta-tomcat-5jakarta-tomcat-catalinajakarta-tomcat-connectorsjakarta-tomcat-jasper,我覺(jué)得Tomcat的開(kāi)發(fā)者可能嫌這樣做太麻煩了,所以Tomcat6版本中將這些子項(xiàng)目都合并在一起了。但是,這種做法不利于我們閱讀理解源代碼。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表