Maven基础知识详解
1. 简介
Maven在Java领域的应用已经非常广泛了,有了Maven的存在是的开发人员在搭建、依赖、扩展和打包项目上变得非常简单。
2. Windows安装Maven
- 下载安装包
http://maven.apache.org/download.cgi - 解压到安装目录,例如:D:\maven
- 配置环境变量
- 新增MAVEN_HOME
MAVEN_HOME
D:\maven\apache-maven-3.6.3
- path中添加
;%MAVEN_HOME%\bin
- 在控制台测试
mvn -v
- 出现版本信息等,即为安装成功
- 配置本地仓库路径
# 打开:D:\maven\apache-maven-3.6.3\conf\settings.xml
<localRepository>D:\maven\maven-repository</localRepository>
- 配置阿里镜像仓库,加速下载
# 打开:D:\maven\apache-maven-3.6.3\conf\settings.xml,在<mirrors></mirrors>下添加
<mirror>
<id>AliMaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
3. Maven基础知识
3.1. 本地仓库、私服、中央仓库

私服根据实际情况可有可无。
本地仓库:主要作用为在本地缓存jar包。项目需要依赖某些jar包时,先去本地仓库找,找不到再去私服找,私服找不到就去中央仓库找。
私服:主要作用为存储公司内部jar。假如某项目A依赖别的项目B,不可能将项目B引入到本地,也不可能每次找项目B团队打包,因此将项目B的jar上传到私服,每次直接从私服获取即可。另外,私服还充当了中央仓库的角色。
中央仓库:主要作用为仓库存储了互联网上的jar,由Maven团队来维护。
3.2. Maven坐标
- groupId
组织名称 - artifactId
项目名称 - version
版本 - scope
依赖范围。共有3种作用域,分别是编译、测试和运行时期。值有6种类型,分别是:
compile:默认值,编译测试和运行都有效;
provided:编译和测试的时有效,运行时不生效;
runtime:测试和运行时有效;
test:只在测试的时有效;
system:编译和测试的时有效,与本机系统关联,可移植性较差;
import:导入的范围,使用在dependencyManagement标签中,表示从其他的pom中导入dependency的配置。
例如:<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3.3. 版本
version分为开发版本(Snapshot)和发布版本(Release)。
在实际开发中,经常存在项目A依赖项目B,项目B在测试过程中,需要经常修改代码,为了避免冲突,需要每次变更版本号,因此项目A也需要跟着变更。其实Maven已经提供了解决办法,就是使用Snapshot版本,当项目B修改代码后,发布到私服时会形成带有时间戳版本号的Snapshot版本,每次项目A在构建项目时会自动下载项目B的最新版本。当项目B稳定后,即可使用Release版本,发布到私服。
3.4. 依赖冲突
例如:项目A依赖项目B和项目C,但是项目B和项目C分别依赖不同版本的项目D,则出现项目A到底依赖那个版本的项目D。
解决依赖冲突需要遵循3个基本的原则:
(1)短路优先
例如:A → B → C → X.v1.jar,A → D → X.v2.jar,则A最终依赖X.v2.jar。
(2)后声明先解析
例如:A同时依赖X.v1.jar和X.v2.jar,则A最终依赖X.v2.jar。
(3)依赖传递
例如:A → B,B → C,则A都依赖B和C。
也可使用exclusions标签排除依赖。例如:
<dependencies>
<dependency>
<groupId>com.c3stones</groupId>
<artifactId>A</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>com.c3stones</groupId>
<artifactId>X</artifactId>
<version>1.0-SNAPSHOT</version>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3.5. 构建命令
| 命令 | 说明 |
|---|---|
| mvn compile | 编译 |
| mvn clean | 清除target目录 |
| mvn test | 测试 |
| mvn package | 打包 |
| mvn install | 上传到本地仓库 |
| mvn deploy | 上传到私服 |
常用命令(去除单元测试):mvn clean install -Dmaven.test.skip=true
3.6. Maven聚合
- 创建工程P,将packaging设置为pom
- 创建工程A、B、C
- 在工程P的pom为文件中将工程A、B、C聚合
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
</modules>
3.7. pom文件标签说明
| 标签 | 说明 |
|---|---|
| groupId | 组织 |
| artifactId | 项目名称 |
| packaging | 打包方式 |
| version | 版本号 |
| name | 项目描述名 |
| description | 项目描述 |
| parent | 父依赖 |
| properties | 参数 |
| dependencies | 依赖列表 |
| dependency | 依赖项 |
| dependencyManagement | 依赖管理 |
| build | 构建配置 |
| plugins | 插件列表 |
| plugin | 插件 |
| modules | 聚合模块列表 |
| module | 聚合模块 |
4. Maven创建SpirngBoot工程配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.c3stones</groupId>
<artifactId>spring-boot-maven-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-maven-demo</name>
<description>Spring Boot Maven Demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.8.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Maven基础知识详解的更多相关文章
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙
消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...
- RabbitMQ基础知识详解
什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...
- Cisco路由技术基础知识详解
第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是( )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12 ...
- Python基础知识详解 从入门到精通(七)类与对象
本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...
- 直播一:H.264编码基础知识详解
一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...
- Redis基础知识详解(非原创)
文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...
- 第157天:canvas基础知识详解
目录 一.canvas简介 1.1 什么是canvas?(了解) 1.2 canvas主要应用的领域(了解) 二.canvas绘图基础 2.0 sublime配置canvas插件(推荐) 2.1 Ca ...
- 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)
在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...
- Thrift入门初探(2)--thrift基础知识详解
昨天总结了thrift的安装和入门实例,Thrift入门初探--thrift安装及java入门实例,今天开始总结一下thrift的相关基础知识. Thrift使用一种中间语言IDL,来进行接口的定义, ...
随机推荐
- Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期
一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...
- xml格式数据和数组数据互相转换
数组转换成xml数据 <?php $arr=array( 'username'=>'huahua', 'password'=>'123456', 'number'=>'1588 ...
- 修改pycharm中的flask项目名遇到的坑
曾修改过自己的项目名,并在settings中的解释器也更正过来了.然后执行pip list 报错: failed to create process. 解决方法如下: 到你的项目的venv目录下的Sc ...
- 2个快速制作完成一幅思维导图的iMindMap思维导图用法
随着思维导图的流行,与其相关的思维导图制作软件如雨后春笋,纷纷进入我们的视野中,更让人难以选择.那想要入门的萌新该如何开始这个新的旅途呢? 各式各样的思维导图制作软件当中,有一个软件得到了大家一致的好 ...
- 常见的名片尺寸如何在CorelDRAW预设
说到名片想必大家肯定不陌生,是我们生活中随处可见的物品,也是商家宣传必不可少的印刷物料.那么名片的尺寸是多少?我们做名片的时候该如何把握好名片的尺寸呢?在CDR中有专门的名片尺寸,下面小编就为大家简单 ...
- layui $().click() 失效问题
//使用此点击事件失效 $(".sub2").on('click', function() { alert('响应点击事件'); }); //将指定的事件绑定在document上, ...
- workerman windows环境下无法启动问题
问题描述 使用laravel框架composer加载workerman/gateway-worker扩展使用workerman做客服系统.通过laravel的command命令: php artisa ...
- Gin + 七牛云对象存储
配置七牛云存储 创建存储空间 拿到密钥 安装七牛云对象存储SDK 推荐go.mod安装 // 将下面地址复制到go.mod,然后执行go mod download github.com/qiniu/a ...
- webgl智慧楼宇发光效果算法系列之高斯模糊
webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...
- 这 6 个 Spring Boot 项目够经典
不得不佩服 SpringBoot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了. SmartAdmin 我们开源一套漂亮的代码和一套整洁 ...