一、Maven 版本管理

Maven 的推荐版本号约定为:主版本号.次版本号.增量版本号-<里程碑版本>
开发中的版本要以 -SNAPSHOT 结尾,因为这种快照版本是支持 jar 包被覆盖的,那么,开发时候的 Maven 命令应该使用 mvn clean package -U (强制拉一次)
快照版本可以升级为正式版本的条件:

  • 所以自动化测试应对全部通过
  • 项目没有配置任何快照版本的依赖
  • 项目没有配置任何快照版本的插件
  • 项目所包含的代码已经全部提交到版本控制系统中

二、Maven 生命周期和常用命令

compile

执行该命令会把代码进行编译

clean

执行该命令会把 /target 目录下清空

test

执行该命令会运行项目下的所有 test case

package

执行该命令会对项目进行打包

install

将 jar 包安装到本地仓库中,在多模块的项目中,如果依赖的模块发生变更,需要重新执行 install 才能生效

deploy

把本地 jar 包发布到远端私服地址

Maven 的生命周期

理解下边两句话,就理解了 Maven 的生命周期:

A Build Lifecycle is Made Up of Phases.
A Build Phase is Made Up of Plugin Goals.



从左往右,Maven 的命令在执行的过程中,会先执行该命令前面的所有命令。

三、Maven 常用插件

两个插件地址:

https://maven.apache.org/plugins/
http://www.mojohaus.org/plugins.html

tomcat7-maven-plugin

findbugs-maven-plugin

maven-checkstyle-plugin

maven-enforcer-plugin

maven-source-plugin

四、Maven 自定义插件

自定义插件

新建一个 Maven 项目,将 pom.xml 里边的打包方式更改为 <packaging>maven-plugin</packaging>
增加如下依赖:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.3</version>
</dependency>

新建一个类,继承 org.apache.maven.plugin.AbstractMojo,实现对应的方法
增加注解 org.apache.maven.plugins.annotations.Mojo,增加 name 属性,代表 plugin 的 goal
mvn install
参数传递:插件类中增加变量,增加注解 org.apache.maven.plugins.annotations.Parameter

使用插件

挂载在项目的 pom.xml 中,增加 plugin 中 execution 的 phase 和 goal 属性:

五、Maven Profile 动态配置文件

a) 使用场景 dev/test/pro

b) 根据 activeProfile 来切换 setting.xml 中设置的私服地址(家和公司两套)

六、Maven 仓库

a)下载

b)安装 解压

c)使用http://books.sonatype.com/nexus-book/reference3/index.html

i.http://192.168.1.6:8081/nexus

ii.admin/admin123

d)发布

i.pom.xml 配置

e)下载jar配置

i.配置mirror

ii.Profile

七、Maven Archetype 模板化

生成一个模板

  • 在项目目录下执行命令:mvn archetype:create-from-project
  • 命令运行成功后,会在工程的 target/generated-sources/archetype 目录下生成一个 Archetype,进入这个目录:cd /target/generated-sources/archetype
  • 如果想要将新生成的 archetype 运行在本地仓库,就运行 maven 命令:mvn install;如果想要共享这个 archetype,就使用 deploy 命令。

八、Maven 反应堆

反应堆

在一个多模块的 Maven 项目中,反应堆(Reactor)是指所有模块组成的一个构建结果,对于单模块的项目,反应堆就是该模块本身,但是对于多模块的项目来说,反应堆就包含了各模块之间继承与依赖的关系,从而能够自动计算出合理的模块构建顺序。
构建顺序一般为:主 POM 的读取顺序 + 继承或者依赖的顺序
模块之间的依赖关系会将反应堆构成一个有向循环图(Directed Acyclic Graph,DAG),各个模块是该图的节点,依赖关系构成了有向边。这个图不允许出现循环,当出现循环依赖时,Maven 就会报错。

裁剪反应堆

有时,在多模块项目中,如果只改了某一个模块的内容,为了加快构建,可以不需要完整构建所有模块,可以有选择地构建,常用命令如下:

  • -am,—also-make,表示同时构建所列模块的依赖模块
  • -amd,-also-make-dependents,表示同时构建依赖于所列模块的模块
  • pl,—projects ,表示构建指定的模块,模块间用逗号分隔
  • rf,-resume-from ,表示从指定的模块开始构建

mvn clean package -Dmaven.test.skip=true -pl api -amd

Maven 进阶的更多相关文章

  1. SpringMVC&Maven进阶

    3. SpringMVC 3.1 了解SpringMVC 概述 SpringMVC技术与Servlet技术功能等同,均属于web层开发技术 学习路线 请求与响应 REST分割 SSM整合 拦截器 目标 ...

  2. 转: maven进阶:一个多模块项目

    一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...

  3. Maven进阶宝典

    前言: 团队在开发过程中用的是maven项目,由于对maven的一些打包流程以及相关参数配置不是太了解,因此应大家的需求做一下maven的讲解,为了不误导大家,看了很多相关资料,自己也实验了一下,就把 ...

  4. maven进阶:一个多模块项目

    一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...

  5. 用起来超爽的Maven——进阶篇

    以后随着使用的maven的频率增加,此文件会越来越大,也是为什么需要把默认C:\Users\Administrator\.m2 \repository目录改变为D:/OpenSources/repos ...

  6. 【连载】Maven系列(三) 进阶

    相关文章: 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 一.Maven坐标: Maven世界拥有大量需要构建jar文件,我们需要找一个用 ...

  7. Maven配置详见

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 maven 配置详解 标签: mave ...

  8. 【连载】Maven系列(四)——配置私服

    相关文章 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 3.<Maven系列(三) 进阶> 一.为什么需要私服 有些公司并不提 ...

  9. 项目管理构建工具——Maven(高阶篇)

    项目管理构建工具--Maven(高阶篇) 我们在之前的文章中已经基本了解了Maven,但也仅仅只止步于了解 Maven作为我们项目管理构建的常用工具,具备许多功能,在这篇文章中我们来仔细介绍 分模块开 ...

随机推荐

  1. android 数据库更新

    SQLiteOpenHelper封装       继承SQLiteOpenHelper类,在构造方法中分别需要传入Context,数据库名称,CursorFactory(一般传入null,为默认数据库 ...

  2. Tarjan缩点求入度为零的点的个数问题

    Description: 一堆人需要联系,但如果x 可以联系 y,你联系了x就不用联系y了,你联系一个人都会有固定的花费,问你最小联系多少人,和最小花费 Solution: Tarjan缩点,求出缩点 ...

  3. Tarjan求缩点化强连通图

    Describe: 求一个有向图加多少条边可以变成一个强连通图 Solution: Tarjan缩点染色后,判断出度和入度,所有点的出度 = 0 的和 和 入度 = 0 的和的最大值即为所求. 缩点染 ...

  4. 如何处理由Dll缺失造成的程序直接崩溃的问题。

    问题描述:在开发一个上位机程序时(C#.winform),使用到了Kvaser的SDK,而这个SDK是基于对应的Kvaser驱动开发的.当前PC如果没有装Kvaser驱动, 程序启动时,会直接奔溃.调 ...

  5. FNDLOAD使用大全

    FNDLOAD使用大全   Syntax FNDLOAD [username/password] 0 Y [mode] [configuration file] [target data file] ...

  6. Ubuntu下mount命令的好用处

    mount,也就是挂载.如果是让电脑自己挂载Windows的分区,也就是你直接在文件管理器里点击那些Windows的盘符,系统就会帮助你自动挂载,不过其挂载后的名称太长太复杂,不方便终端操作.所以还是 ...

  7. 机器学习实战-ch2-有标签的聚类算法

    本书中的这个聚类算法多少有些让人意外.通常的聚类算法是这样的: 给定一堆点: 给定一个距离计算的算法: 给定一个cluster之间的距离d,或者最小的cluster数目k: 初始化,每个点作为初始集群 ...

  8. CentOS 7配置nginx-1.13.10支持http/2和Server Push

    0.确保openssl版本大于1.0.2 openssl version 1.下载nginx-1.13.10 wget http://nginx.org/download/nginx-1.13.10. ...

  9. 通过 NewLife.XCode 迁移任意现有数据库到任意数据库

    通过 NewLife.XCode 迁移任意现有数据库到任意数据库(附分表分库方法) 本文背景是将其他系统的数据库迁移到另一个数据库(仅需 20 行代码),也可以作为项目迁移用,生成自己系统的专属实体代 ...

  10. winform最小化后重复进load事件原因

    最近编写一个工具发现的问题,窗体不论是最小化还是进入托盘,重新打开的时候都会进入控件load事件. 产生这个现象的条件是: 1.使用了用户控件,在控件中使用了load事件 2.在主窗体中,隐藏或显示任 ...