??xml version="1.0" encoding="utf-8" standalone="yes"?>
其实软g开发区分阶D已l广为大家接受,普遍的概念即需要区分ؓ分析、设计、实施、测试、发布,q程中会产生若干产物Q如需求说明书、概要设计、详l设计等。若提及q程Ҏ(gu)Q如RUP的话Q主要分为四大阶D,先启Q?/span>InceptionQ、精华(ElaborationQ、构建(ConstructionQ、交付(TransitionQP代的开发方式,?/span>Scrum的核心概念则?/span>Sprint?/span>
Maven在项目管理中有那些帮助呢Q?/span>Maven能够从一个信息中心ؓ目提供构徏Q报告,文~制{工作。在Maven官方介绍?/span>What is maven》中介绍?/span>maven的项目目标(ObjectivesQ(http://maven.apache.org/what-is-maven.htmlQ,如下Q?/span>
l 化构E?/span>
l 提供l一的构建系l?/span>
l 提供目质量信息
l 提供对于开发最?jng)_늚指导
l 允许对于新特性的透明整合
对于Maven影响最为深ȝ是它的构徏pȝQ几乎诏I了整个实施阶段。作为对比我们参考一?/span>RUP?/span>Construction阶段Q以?/span>Scrum的单?/span>Sprintq程?/span>
RUP?/span>Construction阶段的目标:
q个阶段的目标是澄清需求ƈZ架构基线完成开发?/span>
l 通过优化资源来羃减开支,q免无意义的争执与q工?/span>
l 实用性与质量兼具?/span>
l 快发布可用版本?/span>
l 完成Ҏ(gu)有功能的分析、设计、开发、测试?/span>
l 采用增量q代的模式完成开发ƈ准备交付?/span>
l 查项目发布的所有资源是否已l准备完全?/span>
l 形成目l之间的q行开发?/span>
在《硝烟中?/span>Scrum?/span>XP》一书中Q介l了作者实?/span>Scrum的过E。在一?/span>Sprint中,不是只有Sprint backlog?/span>burn down chat{,实施q程中的敏捷思想也是其中的核心,我们来看看敏捷信奉的一部分最?jng)_践:
l 单设计(Simple DesignQ?/span>
l l对~程Q?/span>Pair ProgrammingQ?/span>
l 试驱动Q?/span>Test-Driven DevelopmentQ?/span>
l 规模发布(Small ReleasesQ?/span>
l 持箋集成Q?/span>Continuous IntegrationQ?/span>
l 集体拥有代码Q?/span>Collective Code OwnershipQ?/span>
l ~码标准Q?/span>Coding StandardQ?/span>
Maven对于上述目标中的质量Q实用性与质量Q以试驱动Q、可用(可用版本Q小规模Q、资源管理等均能发挥较大的作用。主要是其定义了一套完整优U的构建生命周期机Ӟ其基本阶D如下:
l validate – 验证目正确性及依赖有效?/span>
l compile – ~译目源码
l test – 使用合适的单元试框架对编译后的源码进行测试,试代码不会被打包或发布
l package –编译后的代码以规定格式打包Q如Jar
l integration-test – 打包后的代码放|于环境中进行集成测?/span>
l verify – 查打包的有效性ƈ验证质量标准
l install – 包装蝲入本C库,以提供与其他目的依?/span>
l deploy – 包发布臌E仓库中
其上每一个阶D实际都分ؓ前中后三个阶D,用户可以定义在每一个阶D前后进行自定义的操作,打造自q构徏程Q如在某个阶D|行前制定Ҏ(gu)的配|文Ӟ完成后再改回默认Q。对于阶D늚实际使用方式Q如Q?/span>validate可以目所有依赖有效,test可以针对dao层进行单元测试,intergration-test可以对完整业务流E或服务层等q行集成试?/span>
在项目中实际使用的经验,对于标签的用心得:
1.<dependency> - 依赖标签Q最重要的标{,也是Maven的基功能?/span>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
2. <repository> - 资源仓库Q可以包含多个,常用的有MavenQ?/span>Jboss{,如下是公司内建的Nexus资源库?/span>
<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> - 解释为情景模式可能较为合适。可以有多个Q在何种场景下会使用哪些属性、插件等。如下例子便是当~失某个文g时激zR?/span>
Q感觉写的不错的一,http://blog.csdn.net/turkeyzhou/article/details/4894657Q?/span>
<profile>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
</file>
</activation>
</profile>
4.<build> - 构徏q程。是q行整个目理的核心标{。重炚w要掌握的知识是生命周期?/span>
Q?/span>http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_ReferenceQ?/span>
下面的例子就是制定了打包时的资源路径Qƈ且定义了最l打包的名称?/span>
<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 > - 支持插g。如单元试自动化,之前提到?/span>Ant的插件等。若有某些功能觉得不手Q可以尝试官|找一下有没有合适的插gQ?/span>http://maven.apache.org/plugins/index.htmlQ?/span>
下面的例子就是在集成试中,只运行后~?/span>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>