Maven生命周期小记

1、Maven生命周期是为了所有的构建过程进行抽象和统一。Maven从大量的项目和构建工具中学习和反思,总结了一套高度完善、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。

2、Maven三套独立的生命周期

clean生命周期,包含三个阶段

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

2)clean清理上次构建的文件

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

default生命周期

validate

initialize

generate-sources

process-sources处理主项目资源文件,对src/main/resources目录内容进行变量替换以后复制到项目输出的主目录

generate-resources

process-resources

compile编译项目的主源码,编译src/main/java目录下的java文件至项目输出的主目录

process-classes

genarate-test-sources

process-test-sources处理测试资源文件

genarate-test-resources

process-test-resources

test-compile编译项目测试代码

process-test-classes

test使用单元测试框架运行测试,测试代码不会被打包和部署

prepare-package

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

pre-integration-test

integration-test

post-integration-test

verify

intall将包安装到Maven本地库

deploy将最终包复制到远程仓库

site生命周期

pre-site执行一些生成项目站点之前的工作

site生成项目站点文档

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

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

3、插件目标

对于Maven插件本身为了能够复用代码一个插件往往能执行很多个功能。这些功能聚集在一个插件里,每个功能就是插件的一个目标。

4、插件绑定

Maven的生命周期是与插件绑定的,用以完成实际的构建任务。具体而言,是生命周期阶段和插件目标的相互绑定,以完成某个具体的构建任务。例如项目编译这一任务,它对应了default生命周期的compile这一阶段,而maven-compiler-plugin这一插件的compile目标能够完成该任务。因此将它们绑定。

                      

5、内置绑定

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

生命周期阶段 插件目标
pre-clean  
clean maven-clean-plugin:clean
post-clean  

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

生命周期阶段 插件目标
pre-site  
site maven-site-plugin:site
post-site  
site-deploy maven-site-plugin:deploy

  default生命周期与内置插件绑定关系及具体任务(打包类型: jar)

生命周期阶段 插件目标 执行任务
process-resources maven-resources-plugin:resources 复制主资源文件至主输出目录
compile maven-compile-plugin:compile 编译主代码至主输出目录
process-test-resources maven-resources-plugin:testRresources 复制测试资源文件至测试输出目录
test-compile maven-compiler-plugin:testCompile 编译测试代码至测试输出目录
test maven-surefire-plugin:test 执行测试用例
package maven-jar-plugin:jar 创建项目jar包
install maven-install-plugin:install 将项目输出构件安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构件部署到远程仓库

注意:以上只列出了拥有插件绑定关系的阶段,default生命周期还有很多其他阶段,默认它们没有绑定任何插件,因此也没有任何实际行为。

6、自定义绑定

   除了内置绑定以外,用户还能自己选择将某个插件目标绑定到生命周期的某个阶段上。一个常用的例子是创建项目的源码JAR包。我们使用maven-source-plugin插件完成我们的任务,它的jar-no-fork目标能将主代码打成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>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
   </build>

executions下的每个execution子元素可以用来配置执行一个任务。该例子中配置了一个ID为attach-sources任务,通过phase配置,将其绑定到verify生命周期阶段,再通过goal配置指定的插件目标。最后运行以下命令:

mvn verify

注意:有时候即使不通过phase元素配置生命周期阶段,插件目标也能绑定到生命周期阶段。原因是:很多插件的目标在编写时已经定义了默认的绑定阶段。可以使用maven-help-plugin查看插件详细信息。了解插件的默认绑定阶段。运行如下命令:

mvn help:describe -DgroupId=org.apache.maven.plugins -DartifactId=maven-source-plugin -Dversion=2.1.1 -Ddetail

输出如下:

source:test-jar-no-fork
  Description: This goal bundles all the test sources into a jar archive.
    This goal functions the same as the test-jar goal but does not fork the
    build, and is suitable for attaching to the build lifecycle.
  Implementation: org.apache.maven.plugin.source.TestSourceJarNoForkMojo
  Language: java
  Bound to phase: package

  Available parameters:

    archive
      The archive configuration to use. See Maven Archiver Reference.

这里关心的是Bound to phase: package,表示该目标表默认绑定到的生命周期阶段,这里是package。也就是说如果用户配置使用jar-no-fork目标的时候,如果不指定phase参数,该目标默认昂定到package阶段。

7、命令行插件配置

  用户可以在Maven命令中使用-D参数,并伴随一个参数键=参数的形式来配置插件目标参数。例如:

mvn install -Dmaven.test.skip=true

参数-D是java自带的,其功能是通过命令行设置一个java系统属性,maven简单的重用了该参数。

8、在线插件信息

详情了解:http://maven.apache.org/plugins/index.html

  下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/

9、目标前缀

  完整命令:

mvn org.apache.maven.plugins:maven-help-plugin:2.1:describe -Dplugin=compiler

  采用目标前缀:

mvn help:describe -Dplugin=compiler

help是maven-help-plugin的目标前缀,目标前缀使命令更加简洁明了。

10、 插件仓库

  Maven会区别对待依赖的远程仓库和插件远程仓库,不同于repositories及其子元素repository插件仓库使用pluginRepositories和pluginRepository配置。例如:

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

除了pluginRepositories和pluginRepository外其余子元素所表达的含义和远程仓库配置完全一样。

11、解析groupId、插件版本、artifactId

  1)使用目标前缀时groupId会自动用默认的org.apache.maven.plugins补全。

  2)如果没有指定版本信息,会根据解析maven-metadata.xml,Maven2中会被解析至latest,Maven3中使用release。

  3)如果setting.xml文件有配置如下配置,Maven就不仅仅会检查org/apache/maven/plugins/maven-metadata.xml和org/codehaus/mojo/maven-metadata.xml,还会检查com/your/plugins/maven-metadata.xml。这样就能得到完整的插件坐标,如果三个文件没有记录该插件的前缀,则报错。

<pluginGroups>
 <pluginGroup>com.your.plugins</pluginGroup>
</pluginGroups>
时间: 2024-10-09 22:59:05

Maven生命周期小记的相关文章

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

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

Maven实战:Maven生命周期

前言 之前有写过一篇文章Maven实战,介绍了Maven的一些基本概念,以及对于一个初学者而言的Maven基础知识,当时在我看来掌握了这些基本是够用的. 随着工作的深入,越来越感觉对于Maven的理解不够,很多时候使用Maven出了问题都无法很快地解决,因此打算深入地从搭建Maven工程开始学习一下Maven,这篇文章就将自己的学习历程记录下来和网友朋友们分享. 从搭建最简单的Maven项目开始 LZ使用的是MyEclipse,那么就是用MyEclipse搭建一个简单的Maven项目.第一步,n

Maven生命周期(插件)

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

(十二)Maven生命周期和插件

除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package.Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin完成.生命周期和插件两者协同工作,密不可分. 1.Maven生命周期 我们在开发项目的时候,我们不断地在经历编译.测试.打包.部署等过程,maven的生命周期就是对所有这些

03.maven生命周期

maven生命周期 maven有一个十分完善的生命周期模型(lifecycle).运行maven的每个步骤都由maven预定义的,相比Ant而言,这种预定义使maven的使用变得简单(Ant的每个步骤都要你手工去定义).这个模型是一种标准,在不同的项目中,maven的生命周期是相同的.一般情况下,mvn clean package 这样的命令是通用的. maven有三套相互独立的生命周期: Clean Lifecycle 在进行真正的构建之前进行一些清理工作. Default Lifecycle

关于spring mvc 请求参数校验使用中的坑 。 maven 生命周期,线程池杂识

//一.使用@Valid @NotNull 启动项目请求,参数为空, // 好像没有效果.原因是只加了jar包:javax.validation:validation-api,这个包是一个规范,并没有实现 // spring 的默认实现是 org.hibernate:hibernate-validator 加上即可. // 再次请求 返回400, //看日志是校验未通过,接下来就是校验异常后处理了.使用以下代码处理 @ResponseBody @ExceptionHandler(MethodAr

Maven生命周期

Maven的生命周期是为了对所有的构建过程进行了抽象了,便于统一. clean(清理) cleanup(清理所有) 此生命周期旨在给工程做清理工作,它主要包含以下阶段: pre-clean - 执行项目清理前所需要的工作. clean - 清理上一次build项目生成的文件. post-clean - 执行完成项目清理所需的工作. default(默认) validate - 验证项目是否正确且所有必要的信息都可用. initialize - 初始化构建工作,如:设置参数,创建目录等. gene

MAVEN - 生命周期(1)

三套生命周期: MAVEN拥有三套互相独立的生命周期,分别是:clean.default和site. clean - 清理项目 default - 构建项目 site - 简历项目站点 这其中,每个生命周期包含了各自的子阶段 其中clean又包括了 pre-clean \ clean \ post-clean 完整的生命周期如图: 命令行与生命周期 mvn clean:调用clean生命周期的clean阶段,实际调用的是pre-clean\clean两个阶段 mvn test :调用defaul

笔记:Maven 生命周期与命令行详解

Maven 拥有三套相互独立的生命周期,分别是 clean.default和site,clean 生命周期的目的是清理项目,default 生命周期的目的是构建项目,而site生命周期的目的是建立项目站点,每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段. clean 生命周期:包含的阶段有 pre-clean.clean 和 post-clean pre-clean:执行一些清理前需要完成的工作 clean:清