Maven札记6-Maven生命周期和插件

Maven笔记6-Maven生命周期和插件

1. 生命周期-模板方法设计模式的典型运用

    Maven拥有三套相互独立的生命周期:clean,default,site;每个生命周期包含一些阶段(phase),这些阶段是有

    顺序的,并且后面的阶段依赖与前面的阶段,用户和Maven 最直接的交互方式就是调用这些生命周期阶段。

    (1) clean

    目的是清理项目,包含三个阶段:

    pre-clean:执行一些清理前需要完成的工作;

    clean:清理上一次构建生成的文件;

    post-clean:执行一些清理后需要完成的工作。

    (2) default

    目的是构建项目,定义了真正构建时所需要执行的所有步骤,有以下主要步骤:

    validate;

    initialize;

    process-sources;

    proces-sources:处理项目主资源文件。一般来说,是对src/mani/resources目录内容变量替换等工作后,复

    制项目输出的主classpath目录中;

    generate-resources;

    process-resources;

    compile:编译项目的主源码。一般来说,是编译src/main/java目录下的java文件至项目输出的主classpaht中;

    process-classes ;

    generate-test-sources;

    process-test-sources:处理项目测试资源文件。一般来说,是对src/test/resource目录的内容进行变量替换

    等工作后,复制到项目输出的classpaht目录中;

    generate-test-resources;

    process-test-resources;

    test-compile:编译项目的测试代码。一般来说,是编译src/test/java目录下的java文件至项目输出的测试

    classpath目录中;

    process-test-classes;

    test:使用test测试框架运行测试,测试代码不会被打包或部署;
    prepare-package;

    package:接受编译好的代码,打包成可发布的格式,如JAR;

    pre-integration-test;

    integration-test;

    post-integration-test;

    verify;

    install:将包安装到Maven本地仓库,共本地其他Maven项目使用;

    deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。

    (3) site

    目的是建立和发布项目站点,包含下面几个阶段:

    pre-site:执行一些在生成项目站点之前需要完成的工作;

    site:生成项目的站点文档;

    post-site:执行一些在生成项目站点之后需要完成的工作;

    site-deploy:将生成的项目站点发布到服务器上。

2. 插件目标

    Maven之定义了抽象的生命周期,具体的任务是交由插件完成的,而插件的功能是由插件的每一个目标来

    体现的。例如:

    dependency:analyze,dependency:tree,dependency:list

    其中analyze,trrr,list均为maven-dependency-plugin的一个目标。

3. 插件绑定

    即生命周期的阶段与插件的目标相互绑定,已完成某个具体的构建任务。

    (1) 内置绑定

    A. clean生命周期阶段与插件目标的绑定关系

    插件目标:maven-clean-plugin:clean与生命周期pre-clean,clean,post-clean绑定。

    B. site生命周期阶段与插件目标的绑定关系

    插件目标:maven-site-plugin:site与生命周期:pre-site,site,post-site绑定,而maven-site-plugin:

    deploy与site-deploy绑定。

    C. default生命周期的内置插件绑定关系及具体任务

    生命周期阶段                       插件目标                                                   执行任务

    process-resources            maven-resources-plugin:resources        复制主自愿文件至输出目录

    compile                             maven-compile-plugin:compile                编译主代码至输出目录

    process-test-resources    maven-resources-plugin:testReources    复制测试资源文件至测试输出目录

    test-compile                     maven-compile-plugin:testCompile          编译测试代码至测试输出目录

    test                                  maven-surefire-plugin:test                      执行测试用例

    package                           maven-jar-plugin:jar                                创建项目jar包

    install                               maven-install-plugin:install                      将项目输出文件安装到本地仓库

    deploy                              maven-deploy-plugin:deploy                   将项目输出构建部署到远程仓库

    (2) 自定义绑定

    用户可以自定义将某个插件目标绑定之生命周期的某个阶段,下面配置在default的生命周期的verify阶段上,在

    执行完集成测试后和安装构建前创建项目源码jar包:

    <build>

        <plugins>

             <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-source-plugin</artifactId>

                <version>2.1.1</version>

                <executions>

                    <execution>

                        <id>attach-sources</id>

                        <phase>verify</phase>

                        <golas>

                               <gola>jar-no-fork</goal>

                        </goals>

                    </execution>

                 </executions>

             </plugin>

        </plugins>

    </build>

4. 插件配置

    (1) 命令行插件配置

    mvn install -Dmaven.test.skip=true

    (2) POM中对插件进行全局配置

    <build>

         <plugins>

             <plugin>

                 <groupId>org.apache.maven.plugins</groupId>

                 <artifactId>maven-compile-plugin</artifactId>

                 <vrsion>2.1.1</version>

                 <configuration>

                      <source>1.6</source>

                      <target>1.6</target>

                 </configuration>

             </plugin>

          </plugins>

    </build>

    (3) POM中插件进行任务配置

5. 获取插件信息:使用maven-help-plugin

    mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compil-plugin:2.1.1

    mvn help:describe -Dplugin=compile

    mvn help:describe -Dplugin=compile -Dgoal=compile

    mvn help:describe =Dplugin=compile -Ddetail

6. 插件仓库

    当Maven需要的插件在本地仓库中不存在时,是不会去远程仓库中查找的,此时需要使用pluginRepositories

    和pluginRepository元素进行配置。

    <pluginRepositories>

         <pluginRepository>

             <id>central</id>

             <name>Maven Plugin Repository</name>

             <url>http://repo1.maven.org/maven2</url>

             <layout>default</layout>

             <snapshots>

                <enabled>false</enabled>

             </snapshots>

             <releases>

                <updaPolicy>never</updatePolicy>

             </releases>

          </pluginRepository>

    </pluginRepositories>