Maven的构建过程包括:初始化、编译、测试、打包、集成测试、部署
Maven拥有三套相互独立的生命周期:clean(清理项目)、default(构建项目)、site(建立项目站点)
每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,以clean为例:
pre-clean:执行一些清理前需要完成的工作
clean:清理上一次构建生成的文件
post-clean:执行一些清理后需要完成的工作
site的生命周期包括:pre-site,site,post-site,site-deploy
命令行与生命周期
以Maven命令为例
mvnclean:调用生命周期的clean阶段,即为pre−clean和clean阶段 mvn test:调用default生命周期的test阶段
mvncleaninstall:调用clean生命周期的clean阶段和default生命周期的install阶段。 mvn clean deploy site-deploy:调用clean生命周期的clean阶段、default生命周期的deploy阶段,及site生命周期的site_deploy阶段,此为site生命周期的最后一个阶段
命令行插件配置
很多插件目标的参数都支持从命令行配置,用户可以再Maven命令中使用-D参数,并伴随一个参数键=参数值的形式,来配置插件目标的参数。例如:
maven-surefire-plugin提供了一个maven.test.skip参数,当为true时就调过测试
$mvn install -Dmaven.test.skip=true
参数D是Java自带的。
POM中插件的全局配置
有些参数的值从项目创建到项目发布都不会改变,对于这种情况在POM文件中一次性配置就比输入方便。例如我们通常会需要配置maven-compiler-plugin告诉他编译Java1.5版本的源文件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
    </plugins>
</build>

POM中插件任务配置
以maven-antrun-plugin为例,将maven-antrun-plugin:run绑定到多个生命周期阶段上,再加以不同的配置,就可以让Maven在不同的生命周期执行不同的任务。

<build>  
    <plugins>  
        <plugin>  
        <groupId>org.apache.maven.plugins</groupId>  
        <artifactId>maven-antrun-plugin</artifactId>  
        <version>1.3</version>  
        <executions>  
            <execution>  
                <id>ant-validate</id>  
                <phase>validate</phase>  
                <goals>  
                    <goal>run</goal>  
                </goals>  
                <configuration>  
                    <tasks>  
                        <echo>I'm bound to validate phase.</echo>  
                    </tasks>  
                </configuration>  
            </execution>  
            <execution>  
                <id>ant-verify</id>  
                <phase>verify</phase>  
                <goals>  
                    <goal>run</goal>  
                </goals>  
                <configuration>  
                    <tasks>  
                        <echo>I'm bound to verify phase.</echo>  
                    </tasks>  
                </configuration>  
            </execution>  
        </executions>  
        </plugin>  
    </plugins>  
</build>

在上述代码中,首先,maven-antrun-plugin:run与validate阶段绑定,从而构成一个id为ant-validate的任务。插件全局配置中的configuration元素位于plugin元素下面,而这里的configuration元素则位于execution元素下面,表示这是特定任务的配置,而非插件整体的配置。这个ant-validate任务配置了一个echo Act任务,向命令行输出一段文字,表示该任务是绑定到validate阶段的。第二个任务的id为ant-varify,它绑定到了verify阶段,同样它也输出一段文字到命令行,告诉我们任务绑定到了verify阶段。