在軟件開發的領域里有各種各樣的“最佳實踐”,它們經常被人們談起,但是似乎很少有真正得到實現的。這些實踐最基本、最有價值的就是:都有一個完全自動化的創建、測試過程,讓開發團隊可以每天多次創建他們的軟件。“日創建”也是人們經常討論的一個觀點,McConnell在他的《快速軟件開發》中將日創建作為一個最佳實踐來推薦,同時日創建也是微軟很出名的一項開發方法。但是,我們更支持XP社群的觀點:日創建只是最低要求。一個完全自動化的過程讓你可以每天完成多次創建,這是可以做到的,也是完全值得的。 在這里,我們使用了“持續集成(Continuous Integration)”這個術語,這個術語來自于XP(極限編程)的一個實踐。但是我們認為:這個實踐早就存在,并且很多并沒有考慮XP的人也在使用著它。只不過我們一直用XP作為軟件開發過程的標準,XP也對我們的術語和實踐產生了深遠的影響。盡管如此,你還是可以只使用持續集成,而不必使用XP的任何其他部分——實際上,我們認為:對于任何切實可行的軟件開發活動,持續集成都是很基本的組成部分。
隨著軟件開發規模的擴大,軟件內在bug的增多,以致于項目經理和開發者被許多無名bug和各種故障弄得焦頭爛額,甚至為了一個小問題,而到會議室開會。于是軟件的發布日期被無限地延期。可是這一切如果有了DailyBuild,項目經理只要在下班前沏上一壺茶,然后在命令提示符下敲入一個命令,這一切便盡在掌握之中。不信,請跟我來。DailyBuild中文譯作“每日構建”是利用一序列軟件,對進行中的項目進行監控,如果發現服務器上共享的項目文件有所改動,便會再次編譯,得到軟件的最新版本,并且生成測試和代碼規范文檔。本文將帶你步入.NET下DailyBuild的佳境。本文主要講解的是如果將DailyBuild相關的一序列軟件合作起來,考慮到篇幅大小,本文將對具體某一個軟件的基礎知識不作詳解。
持續集成(CI)是一種實踐,旨在緩和和穩固軟件的構建過程。持續集成最早由Martin Fowler 于10年前已經提出,希望通過持續集成能夠實現以下過程: <br>1.任何人在任何地點,任何時間可以構建整個項目。 <br>2.在持續集成構建過程中,每一個單元測試都必須被執行。 <br>3.在持續集成構建過程中,每一個單元測試都必須通過。 <br>4.持續集成構建的結果是可以發布的軟件包。 <br>5.當以上任何一點不能滿足時,整個團隊的主要任務就是去解決這個問題。Hudson是一個軟件界非常流行的開源CI服務器,下面介紹從基礎篇、提高篇兩個層面進行介紹。
Hudson使用說明一、Hudson介紹Hudson是一個可擴展的持續集成引擎。主要用于:1.持續、自動地構建/測試軟件項目。2.監控一些定時執行的任務。Hudson擁有的特性包括:易于安裝-只要把hudson.war部署到servlet容器,不需要數據庫支持。易于配置-所有配置都是通過其提供的web界面實現。集成RSS/E-mail/IM-通過RSS發布構建結果或當構建失敗時通過e-mail實時通知。生成JUnit/TestNG測試報告。分布式構建支持-Hudson能夠讓多臺計算機一起構建/測試。文件識別-Hudson能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。插件支持-Hudson可以通過插件擴展,你可以開發適合自己團隊使用的工具。
可能有些讀者并不連接什么是Ant以及入可使用它,但只要使用通過Linux系統得讀者,應該知道make這個命令。當編譯Linux內核及一些軟件的源程序時,經常要用這個命令。Make命令其實就是一個項目管理工具,而Ant所實現功能與此類似。像make,gnumake和nmake這些編譯工具都有一定的缺陷,但是Ant卻克服了這些工具的缺陷。最初Ant開發者在開發跨平臺的應用時,用樣也是基于這些缺陷對Ant做了更好的設計。Ant是Apache軟件基金會JAKARTA目錄中的一個子項目,它有以下的優點。 跨平臺性。Ant是存Java語言編寫的,所示具有很好的跨平臺性。 操作簡單。Ant是由一個內置任務和可選任務組成的。Ant運行時需要一個XML文件(構建文件)。 Ant通過調用target樹,就可以執行各種task。每個task實現了特定接口對象。由于Ant構建文件時XML格式的文件,所以和容易維護和書寫,而且結構很清晰。 Ant可以集成到開發環境中。由于Ant的跨平臺性和操作簡單的特點,它很容易集成到一些開發環境中去。
相信maven1大家都已經很熟悉了,具體maven能做什么,就不詳細說了。個人覺得maven在開源項目中用的還是比較多的,公司內部,就不太清楚了。我以前的公司用過一段時間,不過后來就沒有下文了。與maven1 相比,maven2可算是幾乎重寫了,不過從速度來說應該更快。
Maven是構建Java應用的優秀管理工具,是Apache軟件基金會的頂級項目。其具有開發目錄構建和管理,統一管理第三方依賴,編譯,測試,打包,發布等功能。最大的特點要數第三方依賴管理了,因為其它功能都能從Ant中找到蹤影。以往每個項目獨立管理依賴,使得每個項目打包后都是巨大無比的,而真正的程序文件卻沒有多少,Maven接管第三方依賴后,我們的應用就只有程序文件了,沒有了jar包輕巧很多,而統一的管理,使得我們可以隨意獲取jar資源。初學者使用Maven總是感覺很難上手,其中也有一部分人是被Maven下載資源那瘋狂的做法嚇退的,這就是Maven的精巧之處。從Apache官方網站下載的Maven工具僅僅2M大小,其中是不包含我們要使用的依賴的,那么就要從網絡中獲取這些依賴,就是那個瘋狂下載的過程。下面我們從頭開始構建Maven環境,直到運行Jetty容器執行Web應用,這一切都很簡單。
什么是pom????pom作為項目對象模型。通過xml表示maven項目,使用pom.xml來實現。主要描述了項目:包括配置文件;開發者需要遵循的規則,缺陷管理系統,組織和licenses,項目的url,項目的依賴性,以及其他所有的項目相關因素。
一:cruisecontrol介紹CruiseControl:簡稱CC,持續集成工具,主要提供了基于版本管理工具(如CVS)感知變化或每天定時的持續集成,并提供持續集成報告、Email、Jabber等等方式通知相關負責人,其要求是需要進行日構建的項目已編寫好全自動的項目編譯腳本(可基于Maven或Ant)。在這里以一個項目來簡要的說說cc的使用,通常項目對于日構建的類型的需求分為兩種:1、每天的定時自動集成。2、感知版本管理工具中的變化而進行自動集成。項目對于日構建的目標通常為:1、感知版本管理工具的變化,如發現有變化,則進行集成。2、調用項目編譯腳本進行項目集成。3、合并項目編譯腳本產生的單元測試、功能測試的日志。4、將集成報告發布至網站中。5、將集成的結果以郵件、jabber等等方式通知相應的負責人。
持續集成已成為當前許多軟件開發團隊在整個軟件開發生命周期內側重于保證代碼質量的常見做法。在本系列文章中,Nicholas Whitehead給您介紹Hudson ,一個現在非常流行的開源CI服務器。他將告訴讀者在您的應用開發環境下(實例中包含Windows XP+Tomcat6或Ubuntu Linux+JBoss AS )如何搭建一個Hudson服務器環境,還包含了Hudson中許多配置項的概述,和執行一個自動編譯、測試、報告過程的示例。
Maven是什么?Maven是針對Java開發項目、技術層面的項目管理工具,它提供了構建工具所提供功能的超集,除了構建功能之外,Maven還可以管理項目結構、管理依賴關系、生成報告、生成Web站點、有助于團隊成員之間的交流與協作。<br>Maven不是MS-Project或Primavera-P3那樣面向事務的項目管理工具。Maven是針對Java開發項目、技術層面的。<br>Maven不僅僅是一個像Ant那樣的構建工具,也不僅僅是像Ivy那樣的依賴管理工具。Maven提供構建與依賴管理功能的超集。<br>一個更正式的ApacheMaven的定義:Maven是一個項目管理工具,它包含了一個項目對象模型(ProjectObjectModel),一組標準集合,一個項目生命周期(ProjectLifecycle),一個依賴管理系統(DependencyManagementSystem),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的項目對象模型來描述你的項目,然后Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。
Hudson是一個可擴展的持續集成引擎。主要用于:<br>1.持續、自動地構建/測試軟件項目。<br>2.監控一些定時執行的任務。Hudson擁有的特性包括:<br>易于安裝-只要把hudson.war部署到servlet容器,不需要數據庫支持。?<br>易于配置-所有配置都是通過其提供的web界面實現。?<br>集成RSS/E-mail/IM-通過RSS發布構建結果或當構建失敗時通過e-mail實時通知。?<br>生成JUnit/TestNG測試報告。<br>分布式構建支持-Hudson能夠讓多臺計算機一起構建/測試。<br>文件識別-Hudson能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。<br>插件支持-Hudson可以通過插件擴展,你可以開發適合自己團隊使用的工具。
本文只是簡單的對maven的操作步驟做一個指南性的說明,實際應用還有很多東西需要實踐。
Maven2的最大特點是對第三方依賴庫進行統一管理,只要使用了Maven2就可以讓所有項目都是用統一管理的共享依賴庫,每個項目不再需要自己包含jar包,原來每個項目至少都要幾十M大小,現在省去了jar包,單個項目只需要幾百k。非常適合網上開源項目的使用。Maven2其實只是一個構建工具,最主要的用途是通過幾個簡單的命令實現項目的編譯,測試,打包,發布,還可以生成項目對應的站點以及報表。在更深的層次上,只要清楚如何善用插件,就可以為自己的項目生成各種分析報表。
跟我一起寫Makefile?陳皓概述什么是makefile?或許很多Winodws的程序員都不知道這個東西,因為那些Windows的IDE都為你做了這個工作,但我覺得要作一個好的和professional的程序員,makefile還是要懂。這就好像現在有這么多的HTML的編輯器,但如果你想成為一個專業人士,你還是要了解HTML的標識的含義。特別在Unix下的軟件編譯,你就不能不自己寫makefile了,會不會寫makefile,從一個側面說明了一個人是否具備完成大型工程的能力。因為,makefile關系到了整個工程的編譯規則。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。
與maven1 相比,maven2可算是幾乎重寫了,不過從速度來說應該更快。 主要的幾個新特性包括:<br> 1. 更快、更簡單速度方面可以比上ant了<br> 2.更少的配置文件:現在的配置文件只剩下了settings.xml和pom.xml了。<br> 3.Plugin語言更換:語言開始支持java,BeanShell和ant<br> 4.提供了預定義的模版:這點是最有幫助的,用戶可以自己定義自己的項目模版了,就像用appfuse一樣生成項目結構<br> 5.生命周期的引入:在Maven2中有了明確的生命周期概念,而且都提供與之對應的命令,使得項目構建更加清晰明了。<br> 6.新增Dependency Scope:這點也比較重要,有些用于test范圍的包,可以不用加入依賴了<br> 7.傳遞依賴,簡化依賴管理:這是最為方便的,可以省了很多配置。如a 依賴b,b依賴c 默認 a也會依賴 c。但是也會帶來隱患,如版本沖突。不過maven也已經考慮到了,可以使用exclusions來排除相應的重復依賴。