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. OMV openmediavault NAS系统命令显示颜色

    闲鱼65f元买的我家云刷了OMV系统. 但ls命令查看文件不显示颜色. cd /etc/进入配置文件目录查看并没有bashrc文件,但有个bash.bashrc 在 bash.bashrc后面加入以下 ...

  2. 推荐系统实践 0x05 推荐数据集MovieLens及评测

    推荐数据集MovieLens及评测 数据集简介 MoiveLens是GroupLens Research收集并发布的关于电影评分的数据集,规模也比较大,为了让我们的实验快速有效的进行,我们选取了发布于 ...

  3. 如何修改IDM下载器的临时文件夹位置

    所有的应用程序在下载时,都会有一些默认的选项.比如产生的临时文件存放在C盘目录下,或者定期自动更新等设置.那么当我们的计算机上安装了很多程序之后,C盘的空间就会渐渐地变小了,从而有了空间不足等等情况, ...

  4. 线程池中状态与线程数的设计分析(ThreadPoolExecutor中ctl变量)

    目录 预备知识 源码分析 submit()源码分析 shutdownNow()源码分析 代码输出 设计目的与优点 预备知识 可以先看下我的另一篇文章对于Java中的位掩码BitMask的解释. 1.一 ...

  5. k8S 搭建集群

    k8S 搭建集群1:修改主机名称hostnamectl --static set-hostname masterhostnamectl --static set-hostname node1hostn ...

  6. jmeter多用户登录并发测试

    在使用Jmeter进行性能测试时,我们通常会需要配置多个不同用户进行并发测试,这里简单介绍一下配置方法. 1.运行Jmeter.bat,  在打开的测试计划中右键添加一个线程组: 2.在线程组下添加录 ...

  7. Running Median POJ - 3784

    本题使用对顶堆做法. 为了动态维护中位数,我们可以建立两个堆 :一个大根对,一个小根堆. 用法:在动态维护的过程中,设当前的长度为length,大根堆存从小到大排名 $1 \thicksim \dfr ...

  8. JQuery案例:购物车编辑

    购物车编辑 实现了:商品的加减,总价的变动 实现了:全选/全不选(使用prop而不是attr) 实现了:删除(遮罩层) <html> <head> <meta chars ...

  9. CARDS主题 & 导航栏样式修改

    每个人对于主题样式的感觉是不一样的,譬如字体大小,间距,高宽,距离,颜色等,我们可以一定程度内很直观地去修改主题的某些样式. 首先,在浏览器中利用开发者工具进行调试,找到我们所要改动的那部分结构,写入 ...

  10. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...