码迷,mamicode.com
首页 > 其他好文 > 详细

Maven3生命周期和插件

时间:2015-10-09 23:07:09      阅读:405      评论:0      收藏:0      [点我收藏+]

标签:

生命周期

   Maven的生命周期是通过大量的项目和工具的学习和反思,然后总结出来的一套完善和易扩展的流程,包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和发布站点等几乎所有的构建步骤;同时,Maven的生命周期是抽象的,它只是定义了一系列的生命周期以及生命周期的执行顺序,而具体每个生命周期的处理逻辑由Maven插件提供。

Maven共有三套生命周期:

  • clean周期:主要是用来清理项目

  • default周期:主要是用来构建项目

  • site周期:主要是用来发布项目站点

每个周期中都包含一些有顺序的阶段(phase)。

clean周期包含了以下的阶段:

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

  • clean 清理上一次构建生成的文件;    默认绑定maven-clean-plugin:clean

  • post-clean 执行一些清理完成后需要完成的操作

default周期包含以下的阶段:

  • validate

  • initialize

  • generate-sources

  • process-sources 处理项目主资源文件,一般来说,是对src/main/resources目录内容进行变量的替换等工作后,复制到项目输出的主classpath目录中;  默认绑定maven-resources-plugin:resources

  • generate-resources

  • process-resources

  • compile 编译项目的源代码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中;  默认绑定maven-compler-plugin:compile

  • process-classes

  • generate-test-sources  

  • process-test-resources  默认绑定maven-resources-plugin:testResources

  • test-compile  默认绑定maven-compler-plugin:testCompile

  • process-test-classes

  • test  默认绑定maven-surefire-plugin:test

  • prepare-package  

  • package  默认绑定maven-jar-plugin:jar(当项目package为jar或不填时)

  • pre-integration-test

  • intgration-test

  • post-integration-test

  • verify

  • install 将包安装到本地Maven仓库,供本地其他Maven项目使用  默认绑定maven-install-plugin:install

  • deploy 将包部署到远程Maven仓库中  默认绑定maven-deploy-plugin:deploy

site周期包含以下阶段:

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

  • site 生成项目站点的文档;  默认绑定maven-site-plugin:site

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

  • site-deploy 将生成的项目站点发布到服务器上;  默认绑定maven-site-plugin:deploy

以上生命周期详细可参考官方文档 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

在命令行中输入 mvn -h(help) 可以查看maven命令的格式,可以看到maven命令的格式如下:

mvn [options] [<goal(s)>] [<phase(s)>]

  • options 指命令的选项,像刚刚使用的-h,mvn -h会列出详细的选项介绍,-s 可以指定使用的settings.xml文件的地址

  • goals 指插件的目标,一般为  插件前缀:goal 或 groupId:artifactId[:version]:goal

  • phases 指阶段名,对应上面的阶段,可以最多使用三个阶段,每个周期指定一个阶段,三个周期的阶段相互独立,当指定一个阶段后maven会从指定阶段的周期的第一个阶段绑定的插件目标开始执行一直到指定的阶段,如mvn test会执行default周期从validate一直到test阶段的绑定插件,mvn clean package会执行clean周期的pre-clean和clean阶段以及default周期的validate到package阶段

Maven插件

     Maven的生命周期行为都是由插件实现,Maven官方提供许多官方的插件,比如所有的默认绑定插件,所有的官方插件groupId都是org.apache.maven.plugins,同时还要许多优秀的第三方插件,并且用户可以自己编写插件来完成特殊的需求。

插件目标

     每个插件都有一个或者多个目标(goal),每个目标具体提供了某项功能,有些目标需要与Maven生命周期相绑定,有些可以直接使用,比如:

     mvn help:describe -Dplugins=dependency [-Ddetail] 用来打印出指定插件的目标以及功能,加上-Ddetail可以查看详细信息

     mvn dependency:list 列出所有已解析的依赖
     mvn dependency:tree 列出已解析的依赖树
     mvn dependency:analyze 检查依赖,会警告直接import使用但没有直接依赖的包,以及直接依赖却没有import使用的包


插件绑定

    Maven生命周期的重要阶段都有默认插件目标绑定,具体可看上文,同时也可以自定义绑定的插件目标,如当我们希望在集成测试通过后同时生成项目的源代码包,可以使用maven-source-plugin:jar-no-fork目标,绑定到verify阶段,配置如下:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

插件参数

    在使用插件时可以配置一些插件的茶树便于使用。

  • 当在命令行使用插件时,可以使用-D参数名=值 设置参数值,如 mvn install -Dmaven.test.skip=true 可以跳过测试阶段

  • 当在pom中使用插件时,可以在<configuration></configuration>中设置参数值

插件配置中的默认信息

    在pom文件中配置插件时,有许多的信息可以省略,而使用默认信息来简化配置:

  1. 当插件时Maven官方插件时(即groupId为org.apache.maven.plugins)可以省略groupId

  2. 所有的默认绑定插件都定义在Maven的超级pom文件中,所有的pom文件都继承至它,所以默认绑定插件不用声明

  3. 一些插件的目标会设置默认绑定阶段,这时在pom中配置时可以省略phase,插件目标的默认绑定阶段可以使用mvn help:describe -Dplugins=[前缀或坐标] -Dgoal=目标 -Ddetail查看

  4. 所有插件都可以省略版本(version),默认绑定插件版本被省略时会使用超级pom定义的版本,其他插件会到对应的插件文件夹下检查maven-metadata.xml文件,并将这个文件与远程仓库中对应位置的相同文件归并成一个maven-metadata.xml文件,大致如下结构:

<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.10</version>
  <versioning>
    <latest>2.10</latest>
    <release>2.10</release>
    <versions>
      <version>2.0-alpha-1</version>
      <version>2.0-alpha-2</version>
      <version>2.0-alpha-3</version>
      <version>2.0-alpha-4</version>
      <version>2.0</version>
      <version>2.1</version>
      <version>2.1-atlassian-2</version>
      <version>2.1-SONATYPE-709464</version>
      <version>2.2</version>
      <version>2.2-SONATYPE-810529</version>
      <version>2.3</version>
      <version>2.4</version>
      <version>2.5</version>
      <version>2.5.1</version>
      <version>2.6</version>
      <version>2.7</version>
      <version>2.8</version>
      <version>2.9</version>
      <version>2.10</version>
    </versions>
    <lastUpdated>20151008094254</lastUpdated>
  </versioning>
</metadata>

将会更具版本计算出最新版本(latest,可能是快照版本),和最新发布版本(release),默认使用最新发布版本,但这样省略版本可能会造成无法预料的错误,所以最好还是要显示的声明插件版本。


Maven3生命周期和插件

标签:

原文地址:http://my.oschina.net/u/1413049/blog/514995

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!