Maven基础学习笔记
Maven基础学习笔记
下载链接
- 官网:https://maven.apache.org/
- 所有版本:https://archive.apache.org/dist/maven/maven-3/
- 阿里云云效Maven:https://developer.aliyun.com/mvn/guide
- MVNrepository:https://mvnrepository.com/
Maven简介
- Maven是什么
- Maven的本质是一个项目管理工具,将项目开发和管理的过程抽象成一个对象模型(POM)
- POM(Project Object Model)项目对象模型

- Maven有什么用
- 项目构建:提供标准的、跨平台的、自动化项目构建方式
- 依赖管理:方便快捷的依赖(jar包)管理,避免资源版本冲突的问题
- 统一开发结构
- src
- main
- java
- resources
- test
- java
- resources
- main
- pom.xml
- src
Maven的基本概念
仓库
- 仓库:用于存储资源,里面有各种各样的jar包
- 仓库分类:
- 本地仓库:自己电脑上的存储,一般是Maven自动从远程仓库是下载下来的
- 远程仓库:非自己电脑上的仓库,为本地提供资源
- 中央仓库:Maven官方的仓库
- 私服:部门自己资源存储仓库,一般是Maven自动从远程仓库是下载下来的
- 私服的作用
- 保存具有版权的资源,包含购买和自主研发的jar
- 中央仓库的jar都是开源的,不能有有版权jar
- 一定范围内资源共享,仅对内部开放
- 保存具有版权的资源,包含购买和自主研发的jar

坐标
- 什么是坐标?
- Maven中的坐标用于描述仓库中资源的位置
- https://repo1.maven.org/maven2/
- Maven坐标主要组成
- groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:orgmybatis)
- artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
- version:定义当前项目版本号
- packaging:定义该项目的打包方式
- Maven坐标的作用
- 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
- 坐标查询
- <mvnrepository.com>
仓库的配置
- Maven会默认把下载的资源保存在C盘,可以自定义
- 配置文件位置:Maven的安装目录/conf/settings.xml
- 50行左右:
Default: ${user.home}/.m2/repository <localRepository>D:\Software\ApplicationSoftware\mvnrepository\repository</localRepository>
- 由于Maven的远程仓库在国外,下载速度慢,所以要改一下远程仓库的位置,这里可以使用阿里的镜像仓库
- 阿里云云效Maven:https://developer.aliyun.com/mvn/guide
- 在160行左右,将阿里的
<mirror></mirror>标签,放入配置文件的<mirrors></mirrors>标签内
依赖管理
依赖配置
- 在pom.xml中添加
<!-- 设置所有的依赖 -->
<dependencies>
<!-- 配置具体的某一个依赖 -->
<dependency>
<!-- 依赖所属的群组id -->
<groupId>org.springframework</groupId>
<!-- 依赖所属的项目id -->
<artifactId>spring-webmvc</artifactId>
<!-- 依赖所属的版本号 -->
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖传递
- 依赖具有传递性
- 直接依赖:当前项目直接配置的依赖
- 间接依赖:依赖的依赖
- 依赖冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖
- 指对外隐藏当前项目的依赖资源
- 如果其它项目依赖了当前项目,那么它看不见当前项目的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!-- 隐藏 -->
<optional>true</optional>
</dependency>
排除依赖
- 主动断开依赖资源
- 被排除的依赖不用指定version
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<!-- 断开 -->
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
- 依赖的jar在默认情况下为complie,可以在任何地方使用
- 通过
<scope></scope>标签设置依赖范围 - 依赖范围
- 主程序范围有效(main文件夹范围内)
- 测试程序范围有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
| scope | 主代码 | 测试代码 | 打包 | 范例 |
|---|---|---|---|---|
| compile(默认) | Y | Y | Y | log4j |
| test | Y | junit | ||
| provided | Y | Y | servlet-api | |
| runtime | Y | jdbc |
依赖范围的传递性
- 有依赖范围的资源在传递时,作用范围会受到影响

生命周期与插件
- 一次构建过程经历了多少个事件

- Maven对项目构建的生命周期划分为3套
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点等
clean生命周期
pre-clean执行一些在clean之前的工作clean移除上一次构建生成的文件post-clean执行一些在clean之后的工作
default生命周期
- 执行哪一项,那么生命周期为从第一个到当前项,从上到下

site构建生命周期
pre-site执行一些需要在生成站点文档之前完成的工作site生成项目的站点文档post-site执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy将生成的站点文档部署到特定的服务器上
插件
- 插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件功能
- 默认Maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其它功能
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<phase>generate-test-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
Maven基础学习笔记的更多相关文章
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- 0003.5-20180422-自动化第四章-python基础学习笔记--脚本
0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...
- C#RabbitMQ基础学习笔记
RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...
- handlebars.js基础学习笔记
最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...
随机推荐
- 正则-Java注释代码
今天写了个匹配java中常见的注释,记录一下,以备后用,使用条件将行两边的空格trim掉. (^\/\*.*)|(^\/\/.*)|(^\*.*)
- Dubbo 集群容错有几种方案?
集群容错方案 说明 Failover Cluster 失败自动切换,自动重试其它服务器(默认) Failfast Cluster 快速失败,立即报错,只发起一次调用 Failsafe Cluster ...
- Springboot 抛出Failed to determine a suitable driver class异常原因
SpringBoot项目,已经依赖了MySQL驱动,却还是无法启动,通过问题排除,如果是启动项目,那么pom值 <packaging>pom</packaging> Faile ...
- ArrayList 与 LinkedList 的不区别?
最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问.使用下标访问一个元素, ArrayList 的时间复杂度是 O ...
- 自定义XML文件模板步骤
- Cadence 错误合集
1.原理图DRC出现如下错误"Duplicate Pin Name "GND" found on Packag" 解决方案:原因是元件引脚重复定义,可以进行重新 ...
- API的自动化测试
传统的测试工具在测试一个API的时候,必须手动填写这个API所需要接收的所有信息,比如一个查询航班动态的API,他接收两个输入字段,一个叫flight, 一个叫date,那么测试这个API的用户,需要 ...
- 消息中间件MQ的学习境界和路线
在<深入理解Java类加载机制,再也不用死记硬背了>里我提到了对于一门语言的"会"的三个层次.本篇将以知识地图的形式展现学习消息中间件MQ各个层次要掌握的内容. 知识地 ...
- 《头号玩家》AI电影调研报告(四)
五. 现实中对于技术的实现 1.自由变身 电影中,主人公借助"魔幻眼镜"让自己快速变成另一个人的模样,现实中我们一样也能做到! 在今年游戏开发者大会(GDC)上,一个名为" ...
- python---重建二叉树
""" 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5, ...