《Maven实战》读书笔记
一、Maven使用入门
POM(Project Object Model,项目对象模型),定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等等
二、坐标和依赖
1、何为Maven坐标
Maven坐标的元素包括groupId、artifactId、version、packaging、classifier
groupId:定义当前Maven项目隶属的实际项目
artifactId:该元素定义实际项目中的一个Maven项目(模块)
version:该元素定义Maven项目当前所处的版本
packaging:该元素定义Maven项目的打包方式
classifier:该元素用来定义构建输出的一些附属构建
2、依赖的配置
groupId、artifactId和version:依赖的基本坐标
type:依赖的类型
scope:以来的范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖
3、依赖范围
compile:编译依赖范围,默认依赖范围,对于编译、测试、运行三种classpath都有效
test:测试依赖范围(JUnit)
provided:已提供依赖范围(如容器依赖servlet-api)
runtime:运行时依赖范围(如JDBC驱动)
system:系统依赖范围(需显式指定依赖文件路径systemPath,用于Maven仓库之外的类库文件)
import:导入依赖范围
4、传递性依赖
当第二直接依赖的范围是complie的时候,传递性依赖的范围与第一直接依赖的范围一致;当第二直接依赖的范围是test的时候,依赖不会得以传递;当第二直接依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递依赖的范围同样为provided;当第二直接依赖的范围是runtime的时候,传递依赖的范围与第一直接依赖的范围一致,单compile例外,此时传递性依赖的范围为runtime
如果第一直接依赖、第二直接依赖和传递性依赖的范围一致,又叫范围传递性依赖
5、依赖调解
依赖调解第一原则:路径最近者优先,依赖关系最短的被解析使用
依赖调解第二原则;在依赖路径长度相等的前提下,在POM中依赖声明的顺序靠前的优先
6、可选依赖
只用于当前项目的依赖,不会被传递
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>8.4-701.jdbc3</version>
<optional>true</optional>
</dependency>
</dependencies>
比如持久层工具包项目B,支持多种数据库,项目A在使用这个工具包的时候,需要显示声明对mysql-connector-java或project-b的依赖
7、排除依赖
传递性依赖会给项目隐式地引入很多依赖,有时候会带来问题。
例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目。这时就需要排除掉该SNAPSHOT,并且在当前项目中声明该类库的某个正式发布的版本
还有一些情况,你可能想要替换某个传递性依赖,比如某个类库A不在中央仓库,而另一个类库B有对应的实现,就可以排除A再声明B
<dependencies>
<dependency>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>porject-b</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>project-c</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.juvenxu.mvnbook</groupId>
<artifactId>project-c</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
使用exclusions和子元素exclusion可以排除一个或者多个传递性依赖,声明exclusion的时候只需要groupId和artifactId,而不需要version
8、归类依赖
可以在唯一的地方定义版本,并且在dependency声明中引用这一版本
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
</dependencies>
三、仓库
1、仓库的分类
本地仓库和远程仓库,Maven会优先从本地仓库寻找构建,如果不存在就去远程仓库寻找,发现后下载到本地仓库再使用
远程仓库还分中央仓库、私服和其他公共库,中央仓库是Maven核心自带的远程仓库,包含了绝大部分开源的构件,私服是自己架设的私有的仓库服务器
Install插件的install目标将项目的构建输出文件安装到本地仓库
2、私服
节省自己的外网带宽
加速Maven构建
部署第三方构建
提高稳定性,增强控制
降低中央仓库的负荷
3、远程仓库
4、快照
版本号以SNAPSHOT作为后缀,可以多次发布,maven会自动在版本号最后加上时间戳,依赖这个包的项目只要mvn clean install-U就可以取到最新版本的包
5、镜像
相当于一个拦截器,把匹配到的发往中央仓库的请求转发到镜像仓库,一般配置阿里云的镜像可以显著提高下载速度,也有把私服作为镜像配置
镜像仓库是完全屏蔽被镜像仓库的,镜像仓库无法服务的时候,将无法下载构件
四、生命周期和插件
1、三套生命周期
clean生命周期
default生命周期
site生命周期
2、命令行与生命周期
$mvn clean
$mvn test
$mvn clean install
$mvn clean depoy
五、聚合与继承
1、聚合
为了一次构建多个项目,而不是到个个模块的目录下分别执行mvn命令
<modules>
<module>acount-email</module>
<module>acount-persist</module>
</modules>
2、继承
为了消除重复的配置
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<packaging>pom</packaging>
</parent>
《Maven实战》读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 关于python中str数据类型的内置常用方法(函数)总结
str基本数据类型常用功能 center(self,width,fllchar=none) 内容居中,width表示总长度,fllchar表示空白处默认为 ...
- 项目启动会(project initiating meeting)与项目开工会(kick-off meeting)区别
一.项目启动会initiating meeting 召开时间:是启动阶段结束时召开的会议:主要任务:发布项目章程,并任命项目经理,赋予项目经理动用组织资源的权力:注意事项:(1)会议召开前已经对干系人 ...
- Spring MVC内容协商实现原理及自定义配置【享学Spring MVC】
每篇一句 在绝对力量面前,一切技巧都是浮云 前言 上文 介绍了Http内容协商的一些概念,以及Spring MVC内置的4种协商方式使用介绍.本文主要针对Spring MVC内容协商方式:从步骤.原理 ...
- C#代码实现IoC(控制反转)设计,以及我对IoC的理解
一. 什么是IoC 当在A类中要使用B类的时候,我们一般都是采用new的方式来实例化B类,这样一来这两个类就有很强的依赖关系,不符合低耦合的设计思想.这时候我们可以通过一个中间容器来实例化对象,需要的 ...
- python 28 网络协议
目录 网络协议 1. C/S.B/S 架构 1.1 C/S 架构: 1.2 B/S 架构: 2. 网络通信原理 3. OSI七层协议(TCP/IP五层): 3.1 物理层: 3.2 数据链路层: 3. ...
- The Best Path(HDU5883)[欧拉路]2016青岛online
题库链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883 欧拉回路裸题,第一次接触欧拉路的我是真的长见识了^-^ 懂了欧拉路这道题就是没什么问题了,欧拉路 ...
- Oracle - View
Oracle View的创建 Create Or Replace View ViewName As Select * From Tables/View Where 条件;
- iOS中的几个重要方法
iOS开发中几个重要的方法: 加载类到内存,程序刚启动的时候调用,调用在main函数之前 1.+(void)load{ } 初始化类,类第一次使用的时候调用一次 2.+(void)initialize ...
- E-MAZE_2019牛客暑期多校训练营(第二场)
题意 给出n行m列的迷宫0可走1不可走,有两个操作,操作1变换点(a,b)的值,操作2查询(1,a)到(n,b)的方案数 题解 设\(F[i][j]\)为第i-1行到达第i行第j列的方案数,若点\(( ...
- Codeforces Round #381 (Div. 2) C. Alyona and mex(无语)
题目链接 http://codeforces.com/contest/740/problem/C 题意:有一串数字,给你m个区间求每一个区间内不含有的最小的数,输出全部中最小的那个尽量使得这个最小值最 ...