一、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 中,增加 pluginexecutionphasegoal 属性:

五、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. vs和vim

    vs:win+R键 输入DEVENV(DEV代表development,ENV代表environment)可以召唤vs,但是有的时候召唤不出来,是因为你的vs安装在c盘program里也就是默认安装, ...

  2. (贪心 or DP)Woodcutters -- Codefor 545C

    http://codeforces.com/contest/545/problem/C  Woodcutters time limit per test 1 second memory limit p ...

  3. Alpha阶段敏捷冲刺(六)

    1.站立式会议 提供当天站立式会议照片一张 2.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 祁泽文:查找了单词统计的方法. 徐璐琳:通过" ...

  4. noip第27课作业

    1. 繁忙的都市 [问题描述] 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个 ...

  5. EBADF, read

    nodejs读取文件出的一个错误,解决不了,自己技术还达不到,解决不了这么高深的问题. 描述:需要记录访问的人数,每个人随机到的酒.打算用json文件来存储:read count write coun ...

  6. 冲刺博客NO.5

    今天做了什么:布局UI和效果图,学会了监听事件并销毁监听接口 SMSSDK.unregisterAllEventHandler(); 今天做的东西不多,没有遇到什么苦难

  7. cxGrid单元格获得输入焦点

    cxGrid单元格获得输入焦点   cxGrid单元格获得输入焦点 cxGrid1.SetFocus;cxGrid1DBTableView1.Controller.EditingController. ...

  8. 用代码来细说Csrf漏洞危害以及防御

    开头: 废话不多说,直接进主题. 0x01 CSRF介绍:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session ...

  9. ajax post 请求发送 json 字符串

    $.ajax({ // 请求方式 type:"post", // contentType contentType:"application/json", // ...

  10. Network - Tips

    001 - 查询whois 可通过在线工具进行查询: https://www.whois365.com http://whois.aliyun.com http://whois.chinaz.com ...