Maven3生命周期和插件

生命周期

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),默认使用最新发布版本,但这样省略版本可能会造成无法预料的错误,所以最好还是要显示的声明插件版本。

时间: 2024-08-05 16:30:23

Maven3生命周期和插件的相关文章

Maven3 生命周期与插件(笔记五)

第一节:Maven 生命周期 Maven 生命周期简介:Maven 通过插件的方式完成一系列过程来实现功能. Maven 拥有三套独立的生命周期: Clean 清理项目 Default 构建项目 Site 建立项目站点(了解即可) Clean 生命周期: 1,pre-clean 执行一些清理前需要完成的工作: 2,clean 清理上一次构建生成的文件: 3,post-clean 执行一些清理后需要完成的工作: Default 生命周期: 1,validate: 2,initialize: 3,g

maven详解之生命周期与插件(二)

插件配置 定义解释:插件目标 当我们了解了maven插件之后,我们发现如果为每一个功能编写一个独立的插件显然是不可取的,因为这些任务背后有很多可以复用的代码,因此,把这些功能聚集在一个插件里,每一个功能我们就称之为一个插件目标. 举个例子: maven-dependency-plugin有十多个目标,每个目标对应了一个功能 分析项目依赖:dependency:analyze 列出项目依赖树:dependency: tree 列出项目所有已解析的依赖:dependency:list POM中插件全

maven(7)生命周期和插件

[0]README 1)本文部分文字转自 "maven实战",旨在 review  "maven(7)生命周期和插件" 的相关知识: 2)maven 另外两个核心概念是生命周期和插件:maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任何可能都会由 maven-jar-plugin 完成: [1]何为生命周期 1)intro:maven 的 生命周期就是为了对所有的构建过程进行抽象和统一: 2)maven的生命周期: 生命周期本身不做任何

Maven核心概念之仓库,生命周期与插件

宏观图 一.仓库 统一存储全部Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(还有一种特殊的远程仓库,为节省宽带和时间,在局域网内架设的一个私有的仓库server,用其代理全部的外部的远程仓库.内部项目也能部署到伺服上),其它公开的远程仓库(常见的由Java.net Maven库,Jboss Maven库). Maven依据坐标寻找构件的时候,它首先会查看本地仓库,假设本地仓库存在此构件,则直接使用:假

项目构建之maven篇:6.生命周期与插件

项目生命周期 清理 初始化 编译 测试 打包 部署 三套生命周期 1.clean pre-clean 执行一些需要在clean之前完成的工作 clean 移除所有上一次构建生成的文件 post-clean 执行一些需要在clean之后立刻完成的工作 2.compile validate generate-sources process-sources generate-resources process-resources 复制并处理资源文件,至目标目录,准备打包. compile 编译项目的源

Maven系列学习(三)Maven生命周期和插件

Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期就是为了对所有的构建过程进行抽象和统一,这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤,Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务都是交给插件来完成的 一次构建(build):ini

maven详解之生命周期与插件(一)

Maven是一个优秀的项目管理工具,它能够帮你管理编译.报告.文档等. Maven的生命周期: maven的生命周期是抽象的,它本身并不做任何的工作.实际的工作都交由"插件"来完成. maven的每个构建步骤都可以绑定一个或多个插件行为,而且maven为大多数的构建步骤编写并绑定了默认插件. 三套生命周期: clean.default.site clean: 主要目的是清理项目 pre-clean: 执行一些清理前需要完成的工作 clean: 清理上一次构建生成的文件 post-cle

Maven生命周期(插件)

maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站点. 命令行与生命周期:从命令行执行maven任务的最主要方式就是调用maven的生命周期阶段. mvn clean:该命令调用clean生命周期的clean阶段.实际执行的阶段为clean生命周期的pre-clean和clean阶段. maven的生命周期与插件相互绑定,用以完成实际的构件任务.具

Maven学习笔记(六):生命周期与插件

何为生命周期: Maven的生命周期就是为了对所有的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤.也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上. Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务(如编译源代码)都交由插件来完成.这种思想与设计模式中的模板方法(