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基础知识详解的更多相关文章

  1. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  2. RabbitMQ基础知识详解

    什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...

  3. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  4. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  5. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  6. Redis基础知识详解(非原创)

    文章大纲 一.Redis介绍二.Redis安装并设置开机自动启动三.Redis文件结构四.Redis启动方式五.Redis持久化六.Redis配置文件详解七.Redis图形化工具八.Java之Jedi ...

  7. 第157天:canvas基础知识详解

    目录 一.canvas简介 1.1 什么是canvas?(了解) 1.2 canvas主要应用的领域(了解) 二.canvas绘图基础 2.0 sublime配置canvas插件(推荐) 2.1 Ca ...

  8. 【干货】用大白话聊聊JavaSE — ArrayList 深入剖析和Java基础知识详解(二)

    在上一节中,我们简单阐述了Java的一些基础知识,比如多态,接口的实现等. 然后,演示了ArrayList的几个基本方法. ArrayList是一个集合框架,它的底层其实就是一个数组,这一点,官方文档 ...

  9. Thrift入门初探(2)--thrift基础知识详解

    昨天总结了thrift的安装和入门实例,Thrift入门初探--thrift安装及java入门实例,今天开始总结一下thrift的相关基础知识. Thrift使用一种中间语言IDL,来进行接口的定义, ...

随机推荐

  1. [C/C++] 结构体内存对齐:alignas alignof pack

    简述: alignas(x):指定结构体内某个成员的对齐字节数,指定的对齐字节数不能小于它原本的字节数,且为2^n; #pragma pack(x):指定结构体的对齐方式,只能缩小结构体的对齐数,且为 ...

  2. [原题复现]2019上海大学生WEB-Decade(无参数RCE、Fuzz)

    简介  原题复现:  考察知识点:无参数命令执行.Fuzz  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 环境复现 ...

  3. tp5 生成随机数

    控制器调用 public function GetRanStr(){ if (request()->isPost()) { //生成6位数随机数 return GetRandStr(6); } ...

  4. Model class apps.goods.models.GoodsType doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS

    在admin.py注册这个model时,报了个错: RuntimeError: Model class apps.goods.models.GoodsType doesn't declare an e ...

  5. 详解FL Studio压缩器——Fruity Limiter(下)

    Hello!小伙伴们又见面啦-接上一篇,本篇咱们继续讲解音乐编曲软件FL Studio20压缩器内容. 包络"ENVELOPE"中包含三个旋钮,它们都有什么作用呢?一起来揭晓吧! ...

  6. guitar pro系列教程(二十六):Guitar Pro教程之虚拟吉他功能讲解

    上一章节我们讲述了Guitar Pro的组织小节的相关功能,那么本章节我们还是采用图文结合的方式为大家讲解关于guitar pro中一些虚拟的吉他功能一 一做出讲解,感兴趣的朋友可以一起进来学习了解哦 ...

  7. jmeter测试udp

    jemter本身不支持udp测试,需要下载安装第三方插件,或者下载一个插件管理器(下面那个蝴蝶一样的图标),里面有各种插件可以供你下载 下载链接:https://jmeter-plugins.org/ ...

  8. Matlab 条件循环函数

    条件判断 if 表达式 语句 elseif 表达式 语句 -. else 语句 end 这个与c语言不同的就是 1:要多一个end 2:还有没有括号 3:else if连在一起 for 循环 for ...

  9. 关于你天天见到的JDK、JRE和JVM

    什么是JDK.JRE.JVM? 大家都知道电脑的操作系统是由汇编和C语言写出,因此操作系统无法直接识别其他语言.这时我们就需要为我们写的Java程序配备一名翻译官 ----- 编译环境,将Java程序 ...

  10. C#.NET 强大的LINQ

    LINQ 是 Language INtegrated Query 单词的首字母缩写,翻译过来是语言集成查询.它为查询跨各种数据源和格式的数据提供了一致的模型,所以叫集成查询.由于这种查询并没有制造新的 ...