文档章节

Maven进阶篇之Maven的生命周期和插件

辉_Dreaming
 辉_Dreaming
发布于 2017/05/05 14:41
字数 1369
阅读 61
收藏 0

一,Maven生命周期

一、Maven的生命周期

Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。

Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。

二、三套生命周期

 Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase。执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase。

  1. clean生命周期:清理项目,包含三个phase。
    1. pre-clean:执行清理前需要完成的工作
    2. clean:清理上一次构建生成的文件
    3. post-clean:执行清理后需要完成的工作
  2. default生命周期:构建项目,重要的phase如下
    1. validate:验证工程是否正确,所有需要的资源是否可用
    2. compile:编译项目的源代码。
    3. test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要打包和布署。
    4. Package:把已编译的代码打包成可发布的格式,比如jar/war/pom。
    5. integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
    6. verify:运行所有检查,验证包是否有效且达到质量标准.
    7. install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
    8. Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
  3. site生命周期:建立和发布项目站点,phase如下
    1. pre-site:生成项目站点之前需要完成的工作
    2. site:生成项目站点文档
    3. post-site:生成项目站点之后需要完成的工作
    4. site-deploy:将项目站点发布到服务器

三、命令行和生命周期

    各个生命周期相互独立,一个生命周期的阶段前后依赖。

1、mvn clean

调用clean生命周期的clean阶段,实际执行pre-clean和clean阶段

2、mvn test

调用default生命周期的test阶段,实际执行test以及之前所有阶段

3、mvn clean install

调用clean生命周期的clean阶段和default的install阶段,实际执行pre-clean和clean,install以及之前所有阶段

二,Maven的插件

一,Maven插件介绍

1.常用的插件

maven的核心文件很小,主要的任务都是由插件来完成。定位到:%本地仓库%\org\apache\maven\plugins,可以看到一些下载好的插件


2  插件的目标(Plugin Goals)

 Maven的生命周期是抽象的,实际需要插件来完成任务,这一过程是通过将插件的目标(goal)绑定到生命周期的具体阶段(phase)来完成的。如:将maven-compiler-plugin插件的compile目标绑定到default生命周期的compile阶段,完成项目的源代码编译:

一个插件通常可以完成多个任务,每一个任务就叫做插件的一个目标。如执行mvn install命令时,调用的插件和执行的插件目标如下:

 

前面的即为插件,后面的即为插件的目标.每个插件都有哪些个目标,官方文档有更详细的说明:Maven Plugins

3.自定义绑定

 用户可以根据需要将任何插件目标绑定到任何生命周期的阶段,如:将maven-source-plugin的jar-no-fork目标绑定到default生命周期的package阶段,这样,以后在执行mvn package命令打包项目时,在package阶段之后会执行源代码打包,生成如:ehcache-core-2.5.0-sources.jar形式的源码包

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>attach-source</id>
                    <phase>package</phase><!-- 要绑定到的生命周期的阶段 -->
                    <goals>
                        <goal>jar-no-fork</goal><!-- 要绑定的插件的目标 -->
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    ……
</build>

同时也可以修改默认绑定的插件参数.如:在上图执行mvn install命令时 maven-surefire-plugin:2.7.2:test  

插件就对我们编写的单元测试进行测试,为了跳过单元测试,可修改该插件的参数跳过单元测试.

<build>
    <plugins>
<!--打包时跳过单元测试-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
          <skipTests>true</skipTests><!--true 跳过单元测试-->
        </configuration>
      </plugin>
...
  </plugins>

Maven插件高度易扩展,可以方便的进行自定义配置。如:配置maven-compiler-plugin插件编译源代码的JDK版本为1.7:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

 

© 著作权归作者所有

辉_Dreaming

辉_Dreaming

粉丝 5
博文 45
码字总数 45151
作品 0
武汉
私信 提问
用AntRun插件测试Maven的生命周期

在用AntRun插件之前,需要了解以下几个知识点: 1、Maven的生命周期,参考:http://www.cnblogs.com/EasonJim/p/6816340.html,主要是要知道生命周期里的每一个阶段。 2、AntRun插件的配置和...

easonjim
2017/05/07
0
0
Maven百科 - 项目构建中的插件与目标

插件与目标 在讲述插件与生命周期关系之前,要明确一个概念,那就是插件目标。Maven它只抽象或者定义了生命周期与对应的任务, 真正去实现这些任务的是各个插件,所以maven的发布包只有3M左右...

Garrry
2015/09/15
89
0
第七章 生命周期和插件

  除了坐标、依赖和仓库之外,Maven另外两个核心概念是声明周期和插件。Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能有maven-jar-plugin完成。生命周期和...

浣雨笑笑生
2015/09/21
68
0
MAVEN的生命周期,jetty插件

MAVEN的生命周期和插件 maven是通过插件来实现功能的。所谓的生命周期就是我们在构建项目时,maven默认需要是想的一些功能,而每一个功能就通过插件的某一功能来实现。 每个插件会有一个或多...

GITTODO
2016/05/19
118
0
Maven百科 - 项目构建中的生命周期与插件管理

Road Map 1 Maven 中的三套生命周期 在maven中,其实是有三套相互独立的生命周期(Lifecycle),而不是我们以为的一套生命周期,准确地来说,在maven的世界,它有自己的一套生命周期管理的技...

Garrry
2015/09/14
52
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部