一、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、远程仓库

  maven上传jar到nexus本地仓库

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实战》读书笔记的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 卷积神经网络cnn的实现

    卷积神经网络 代码:https://github.com/TimVerion/cat 卷积层 卷积层:通过在原始图像上平移来提取特征,每一个特征就是一个特征映射 原理:基于人脑的图片识别过程,我们可以 ...

  2. python之爬虫-必应壁纸

    python之爬虫-必应壁纸 import re import requests """ @author RansySun @create 2019-07-19-20:2 ...

  3. windows安装elasticsearch服务以及elasticsearch5.6.10集群的配置(elasticsearch5.6.10配置跟1.1.1的配置不太相同,有些1.1.1版本下的配置指令在5.6.10中不能使用)

    1.下载elasticsearch5.6.10安装包 下载地址为:  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearc ...

  4. 更新!ArcMap和ArcGIS Pro加载百度影像地图

    上一篇文章写了ArcMap和ArcGIS Pro中加载百度地图 的方法 一次没有把百度影像加载的功能开发出来,趁这几天有空整理了下 加载方法按照上次那篇文章操作. 百度影像wmts加载地址:http: ...

  5. CopyOnWriteArrayList笔记

    CopyOnWriteArrayList笔记 一.前言 Java 5.0 在java.util.concurrent 包中提供了多种并发容器类来改进同步容器的性能. ConcurrentHashMap ...

  6. Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version)

    Leetcode之二分法专题-278. 第一个错误的版本(First Bad Version) 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版 ...

  7. Github资源下载

    自己收集的一些日常使用软件.编程书籍以及自己动手实践的程序,欢迎下载. 收集维护不易,喜欢请Star或Fork支持呀,(^-^)V. 所有资源均自己制作或收集自网络,如有侵权请联系删除. 友情链接 G ...

  8. session一致性的解决方案

    更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文,这个相 ...

  9. Oracle - 获取当前周别函数

    CREATE OR REPLACE FUNCTION GET_WEEK (V_RQ in DATE) return varchar2 as str varchar2(); str1 varchar2( ...

  10. Django 项目创建到启动(最全最详细的第一个项目)

    一.前言 (一).概述 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...