Maven 进阶
一、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 进阶的更多相关文章
- SpringMVC&Maven进阶
3. SpringMVC 3.1 了解SpringMVC 概述 SpringMVC技术与Servlet技术功能等同,均属于web层开发技术 学习路线 请求与响应 REST分割 SSM整合 拦截器 目标 ...
- 转: maven进阶:一个多模块项目
一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...
- Maven进阶宝典
前言: 团队在开发过程中用的是maven项目,由于对maven的一些打包流程以及相关参数配置不是太了解,因此应大家的需求做一下maven的讲解,为了不误导大家,看了很多相关资料,自己也实验了一下,就把 ...
- maven进阶:一个多模块项目
一个多模块项目通过一个父POM 引用一个或多个子模块来定义.父项目,通过以下配置,将子项目关联. <packaging>pom</packaging> <modules& ...
- 用起来超爽的Maven——进阶篇
以后随着使用的maven的频率增加,此文件会越来越大,也是为什么需要把默认C:\Users\Administrator\.m2 \repository目录改变为D:/OpenSources/repos ...
- 【连载】Maven系列(三) 进阶
相关文章: 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 一.Maven坐标: Maven世界拥有大量需要构建jar文件,我们需要找一个用 ...
- Maven配置详见
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 maven 配置详解 标签: mave ...
- 【连载】Maven系列(四)——配置私服
相关文章 1.<用起来超爽的Maven——入门篇> 2.<用起来超爽的Maven——进阶篇> 3.<Maven系列(三) 进阶> 一.为什么需要私服 有些公司并不提 ...
- 项目管理构建工具——Maven(高阶篇)
项目管理构建工具--Maven(高阶篇) 我们在之前的文章中已经基本了解了Maven,但也仅仅只止步于了解 Maven作为我们项目管理构建的常用工具,具备许多功能,在这篇文章中我们来仔细介绍 分模块开 ...
随机推荐
- hdu 2642
这题应该就是标准的二维树状数组,应该没什么难度 处理一下x,y等于0的情况就过了 #include <iostream> #include <cstdio> #include ...
- browsersync
以后不需要F5了 之前实现自动刷新,是通过livereload,它需要插件比较麻烦:现在改为browsersync. BrowserSync,迅捷从免F5开始 完整选项 不止是自动刷新:默认就有 UI ...
- CxGrid 改变某行或单元格的颜色
CxGrid 改变某行或单元格的颜色 一个表(T)的结构结构如下. ID Test 1 20012 14443 17885 26456 4568 cxGrid成功连接到该表, 如果要实现单元格特效 ...
- Hive Bug修复:ORC表中array数据类型长度超过1024报异常
目前HVIE里查询如下语句报错: select * from dw.ticket_user_mtime limit 10; 错误如下: 17/07/06 16:45:38 [main]: DEBUG ...
- JS学习笔记3_函数表达式
1.函数表达式与函数声明的区别 函数声明有“提升”(hoisting)的特性,而函数表达式没有.也就是说,函数声明会在加载代码时被预先加载到context中,而函数表达式只有在执行表达式语句时才会被加 ...
- Windows8.1 安装SQL Server2012——部分组件安装不成功!(提示安装.NET 3.5时出错,无Internet情况下利用win8.1安装镜像安装.NET 3.5)
虽然从事着与开发毫无关系的工作,但却也断断续续维持了近6年的WEB开发,有时因为其它工作原因,可能每做一个项目的时间间隔比较大,有时甚至在做的一个项目因为其他事情而停滞几个月之久(有些项目是自己兴趣或 ...
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Docker Compose模板文件介绍
模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多,这里面大部分指令跟 docker run 相关参数的含义都是类似的.默认的模板文件名称为 docker-compose.yml ,格 ...
- Spring Boot log4j多环境日志级别的控制
之前介绍了在<Spring boot中使用log4j>,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用D ...
- 开发ASP.NET MVC 开发名片二维码生成工具 (原创)
在网上找了很多,都只能生成网址,不能生成名片二维码,于是自己动手. 第一步,写视图界面,主要代码如下: <script type="text/javascript"> ...