項目經理(Project manager)是項目的支柱與核心,維基百科的定義:項目經理是項目管理方面的專家,負責項目的策劃、執行和結束,即整個生命周期過程。項目經理手中的“干將莫邪”便是軟件開發過程方法(software development process/software development life cycle (SDLC)),可能采取的有RUP(Rational Unified Process),敏捷等。
其實軟件開發區分階段已經廣為大家接受,普遍的概念即需要區分為分析、設計、實施、測試、發布,過程中會產生若干產物,如需求說明書、概要設計、詳細設計等。若提及過程方法,如RUP的話,主要分為四大階段,先啟(Inception)、精華(Elaboration)、構建(Construction)、交付(Transition)迭代的開發方式,而Scrum的核心概念則是Sprint。
Maven在項目管理中有那些幫助呢?Maven能夠從一個信息中心為項目提供構建,報告,文檔編制等工作。在Maven官方介紹《What is maven》中介紹了maven的項目目標(Objectives)(http://maven.apache.org/what-is-maven.html),如下:
l 簡化構建過程
l 提供統一的構建系統
l 提供項目質量信息
l 提供對于開發最佳實踐的指導
l 允許對于新特性的透明整合
對于Maven影響最為深刻的就是它的構建系統,幾乎貫穿了整個實施階段。作為對比我們參考一下RUP的Construction階段,以及Scrum的單個Sprint過程。
RUP的Construction階段的目標:
這個階段的目標是澄清需求并基于架構基線完成開發。
l 通過優化資源來縮減開支,并避免無意義的爭執與返工。
l 實用性與質量兼具。
l 盡快發布可用版本。
l 完成對所有功能的分析、設計、開發、測試。
l 采用增量迭代的模式完成開發并準備交付。
l 檢查項目發布的所有資源是否已經準備完全。
l 形成項目組之間的并行開發。
在《硝煙中的Scrum與XP》一書中,介紹了作者實施Scrum的過程。在一個Sprint中,不是只有Sprint backlog、burn down chat等,實施過程中的敏捷思想也是其中的核心,我們來看看敏捷信奉的一部分最佳實踐:
l 簡單設計(Simple Design)
l 結對編程(Pair Programming)
l 測試驅動(Test-Driven Development)
l 小規模發布(Small Releases)
l 持續集成(Continuous Integration)
l 集體擁有代碼(Collective Code Ownership)
l 編碼標準(Coding Standard)
Maven對于上述目標中的質量(實用性與質量,以測試驅動)、可用(可用版本,小規模)、資源管理等均能發揮較大的作用。主要是其定義了一套完整優秀的構建生命周期機制,其基本階段如下:
l validate – 驗證項目正確性及依賴有效性
l compile – 編譯項目源碼
l test – 使用合適的單元測試框架對編譯后的源碼進行測試,測試代碼不會被打包或發布
l package –將編譯后的代碼以規定格式打包,如Jar
l integration-test – 將打包后的代碼放置于環境中進行集成測試
l verify – 檢查打包的有效性并驗證質量標準
l install – 將包裝載入本地倉庫,以提供與其他項目的依賴
l deploy – 將包發布至遠程倉庫中
其上每一個階段實際都分為前中后三個階段,用戶可以定義在每一個階段前后進行自定義的操作,打造自己的構建流程(如在某個階段執行前制定特殊的配置文件,完成后再改回默認)。對于階段的實際使用方式,如:validate可以項目所有依賴有效,test可以針對dao層進行單元測試,intergration-test可以對完整業務流程或服務層等進行集成測試。
在項目中實際使用的經驗,對于標簽的使用心得:
1.<dependency> - 依賴標簽,最重要的標簽,也是Maven的基礎功能。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
2. <repository> - 資源倉庫,可以包含多個,常用的有Maven,Jboss等,如下是公司內建的Nexus資源庫。
<repository>
<id>Suntang's Maven Repository</id>
<name>Suntang Nexus Repository</name>
<url>http://10.10.10.33:8081/nexus/content/groups/public</url>
</repository>
3. <profile> - 解釋為情景模式可能較為合適。可以有多個,在何種場景下會使用哪些屬性、插件等。如下例子便是當缺失某個文件時激活。
(感覺寫的不錯的一篇,http://blog.csdn.net/turkeyzhou/article/details/4894657)
<profile>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
</file>
</activation>
</profile>
4.<build> - 構建過程。是進行整個項目管理的核心標簽。重點需要掌握的知識就是生命周期。
(http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference)
下面的例子就是制定了打包時的資源路徑,并且定義了最終打包的名稱。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/assembly</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<finalName>po</finalName>
</build>
4.< plugin > - 支持插件。如單元測試自動化,之前提到的Ant的插件等。若有某些功能覺得不順手,可以嘗試官網找一下有沒有合適的插件(http://maven.apache.org/plugins/index.html)。
下面的例子就是在集成測試中,只運行后綴為TestSuitex.java的測試類
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<forkMode>once</forkMode>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>false</skip>
<includes>
<include>**/*TestSuitex.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>