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 ...
随机推荐
- error C4996: 'std::_Copy_impl'
以下代码段在VS2008编译可以通过,只是会提示不安全: std::vector<unsigned char> fileData ="asdfsfsfsfsdf";// ...
- 序列化和反序列化&持久化
java序列化与反序列化全讲解 之前一知半解的,对于序列化的概念,为啥用,哪里用也不清楚,现在深入了解协议,先把序列化这个这个概念和和使用场景搞清楚
- 比较HQL、Criteria、Native-SQL这三者做查询的区别,以及应该如何进行选择?
HQL功能很强大,适合各种情况,但是动态条件查询构造起来很不方便: Criteria 最适合动态查询,但不太适合统计查询,QBE还不够强大.只适合简单的查询: Native-SQL可以实现特定的数据库 ...
- Idea集成CSSO插件压缩css文件
首先需要本地已安装node环境,并且csso-cli已通过npm安装到本地目录,只要能找到就行. 1. 打开Settings配置,确认图中的 File Watchers 插件是否已存在,如果不存在,去 ...
- 在 Java 中 Executor 和 Executors 的区别?
Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务 的需求. Executor 接口对象能执行我们的线程任务. ExecutorService 接口继承了 Executo ...
- MyISAM Static 和 MyISAM Dynamic 有什么区别?
在 MyISAM Static 上的所有字段有固定宽度.动态 MyISAM 表将具有像 TEXT, BLOB 等字段,以适应不同长度的数据类型. MyISAM Static 在受损情况下更容易恢复.
- @Qualifier 注解?
当有多个相同类型的 bean 却只有一个需要自动装配时,将@Qualifier 注解和 @Autowire 注解结合使用以消除这种混淆,指定需要装配的确切的 bean.
- 学习SVN02
代码发布方案: 1,安装,优化 软件环境,(nginx,lvs) <-------运维工程师 2,程序代码(不断更新). <--------开发工程师,(开发,运维都可以发布) 3, ...
- springboot-mail发邮件,不需要邮件服务器
很简单 步骤走起-> 1.需要一个邮箱账号,我以163邮箱为例,先开启第三方服务后获得密码,后面用来邮箱登录 2.加入mail 依赖 3.properties配置账号和第三方服务密码(不是邮箱密 ...
- jsp页面学习之"javascript:void(0)"的使用
javascript:void(0) 仅仅表示一个死链接 如果是个# javascript:void(#),就会出现跳到顶部的情况,搜集了一下解决方法 1:<a href="####& ...