敏捷、分布式、ALM过程自动化、企业应用架构
posts - 14, comments - 0, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Maven项目管理理解与使用

Posted on 2012-04-06 14:48 一酌散千忧 阅读(401) 评论(0)  编辑  收藏 所属分类: 敏捷过程方法

项目经理(Project manager)是项目的支柱与核心,维基百科的定义:项目经理是项目管理方面的专家,负责项目的策划、执行和结束,即整个生命周期过程。项目经理手中的“干将莫邪”便是软件开发过程方法(software development process/software development life cycle (SDLC)),可能采取的有RUPRational 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影响最为深刻的就是它的构建系统,几乎贯穿了整个实施阶段。作为对比我们参考一下RUPConstruction阶段,以及Scrum的单个Sprint过程。

 

RUPConstruction阶段的目标:

这个阶段的目标是澄清需求并基于架构基线完成开发。

l          通过优化资源来缩减开支,并避免无意义的争执与返工。

l          实用性与质量兼具。

l          尽快发布可用版本。

l          完成对所有功能的分析、设计、开发、测试。

l          采用增量迭代的模式完成开发并准备交付。

l          检查项目发布的所有资源是否已经准备完全。

l          形成项目组之间的并行开发。

 

在《硝烟中的ScrumXP》一书中,介绍了作者实施Scrum的过程。在一个Sprint中,不是只有Sprint backlogburn 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> - 资源仓库,可以包含多个,常用的有MavenJboss等,如下是公司内建的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>

 


只有注册用户登录后才能发表评论。


网站导航: