一直以來,都想要閱讀某些Java開源項目的源代碼,甚至想要修改某些代碼,實現對開源項目進行二次開發的目的。但老是不知從何入手,直接將開源項目的源代碼導入Eclipse,老是會報不少錯誤,而沒法編譯。能夠直接經過Eclipse打開開源項目的源代碼,至少可以達到可視化源碼閱讀、源碼導航的目的,仍是能在必定程度上解決源碼閱讀不爽的問題,由於直接打開並無改變源文件項目的目錄結果,對於修改事後的代碼,能夠經過命令行找到源文件項目目錄,並使用mvn或者ant對項目進行編譯,再查看修改後的項目是否正確。html
因爲當前Java開源項目幾乎都是採用maven或者ant的方式打包的,因此上述方法再必定程度上解決了閱讀源碼的問題,至少經過Eclipse可以實現源碼之間的導航,可是想要經過Eclipse進行編譯源代碼,甚至調試就沒法辦到了。web
這麼強大的Eclipse,怎麼用起來這麼力不從心呢,罪魁禍首仍是本身太孤陋寡聞了,這麼強大的maven,Eclipse怎麼會沒有插件支持呢,有了maven插件,Eclipse導入maven項目(也就是大多數開源項目的目錄結構),在Eclipse上面就可以直接進行編輯,甚至經過Eclipse去編譯、調試源項目。apache
既然知道了怎樣閱讀開源項目的源代碼,接下來就是安裝Eclipse的maven插件,而後源代碼、二次開發...瀏覽器
前面說了這麼多廢話,是否真的有效呢,下面以Axis2源代碼爲例,作一個小實驗例子,修改services/listServices請求的處理源碼,使得原先僅支持WSDL方式描述的Web服務如今也支持OWL4WS的Web服務描述。
tomcat
第一步:安裝mavenapp
安裝maven實在是簡單,從 http://maven.apache.org/download.html 下載最新的maven版本,而後解壓,配置MAVEN_HOME和MAVEN_OPTS以及path環境變量便可。MAVEN_HOME指向maven的跟目錄,MAVEN_OPTS配置maven執行時的參數,因爲MAVEN默認設置的內存比較少,編譯大項目時可能會出現OutofMemory的狀況,如我沒有設置MAVEN_OPTS而編譯Axis2的源碼時就出現了OutofMemory的狀況,最後配置path,指向%MAVEN_OPTS%\bin便可。使得在命令行界面中可以直接使用maven命令。更多關於maven的介紹,推薦一本書給你們:《Maven實戰》,也有叫《Maven in action》,是一箇中國人寫的,淺顯易懂。eclipse
第二步:安裝Eclipse的maven插件webapp
Help->Install New Software->Add,添加以下內容:maven
m2e - http://download.eclipse.org/technology/m2e/releases學習
如 http://www.eclipse.org/m2e/download/ 所示,上述插件的路徑應該爲m2e的最新版本,使用以前的版本可能會出現依賴其餘插件的狀況,致使m2e插件安裝不上,SB的Eclipse也沒有提示m2e到底依賴哪些插件致使其安裝不上,度娘卻是可以提供一下幫助,可是幾乎不能找到一個可以使用的。
安裝完m2e插件以後,就能經過Eclipse打開maven格式的項目,並可以藉助Eclipse對maven格式的源項目進行編譯,固然也能夠直接經過Eclipse建立一個Maven項目,從而使用maven的方式管理你的項目。maven實在是強大,若是你使用Java語言寫程序,瞭解maven真心是有必要。安裝完後再建立項目或者導入項目時,就能夠選擇Maven進行了。安裝完插件後會看到以下效果:
第三步:在Eclipse中修改源代碼
經過Eclipse導入maven項目,就能使用Eclipse的可視化導航功能對源碼進行閱讀及修改,還能直接執行相關的mvn命令,導入後的程序以下圖所示:
第四步:經過mvn package編譯並打包源碼,獲得發行版本,進行測試
有了maven,源代碼的編譯及打包就變得容易多了,能夠直接經過Eclipse進行,選擇項目右鍵Run As或者右鍵單擊項目的pom.xml文件Run As便可。以下圖所示:
固然,也能夠直接經過命令行進行打包編譯,我選擇採用命令行進行,因爲我只修改了Axis2源碼中的兩個模塊,這兩個模塊分別是axis2-transport-http和axis2-webapp。對這兩個模塊的命令行編輯命令以下:
[plain] view plaincopyprint?
C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\transport\http>mvn clean install
[INFO] BUILD SUCCESS
C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp>mvn clean package
[INFO] Building war: C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp\target\axis2.war
[INFO] BUILD SUCCESS
mvn install是將axis2-transport-http模塊安裝到maven本地倉庫中,而mvn package是將源程序按指定的格式打包,因爲webapp模塊的pom.xml文件中指定了不少依賴模塊,包括其餘項目的或者axis2自己的模塊,如transport-http模塊,打包時會從本地倉庫中自動獲取其依賴的模塊,並打包。若是本地倉庫中沒有相應的模塊,會去網上自動下載,這也是爲何第一次編譯開源項目時會花費很長時間的緣由。
將axis2.war包拷貝到tomcat的webapp目錄下,啓動tomcat,在瀏覽器中輸入http://localhost:8080/axis2/services/listServices,便可看到修改後的頁面已經對OWL4WS進行了支持。以下圖所示:
回過頭來,發現本篇文章滿是廢話,不過就是想表達一下,maven真心是灰常強大,對於想要閱讀Java開源項目源代碼,或者有在這些源代碼的基礎上進行二次開發衝動的童鞋,必定不要錯過maven的學習,不過感受這種方式在修改源代碼,而後進行測試這種方式仍是很是不方便,命令行編譯,還得copy到tomcat下測試運行,哪位有更好的閱讀源代碼並進行二次開發的方式,請你必定要告訴我啊。