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. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Axios前后端分离模式下无感刷新实现JWT续期

    一. 前言 记得上一篇Spring Cloud的文章关于如何使JWT失效进行了理论结合代码实践的说明,想当然的以为那篇会是基于Spring Cloud统一认证架构系列的最终篇.但关于JWT另外还有一个 ...

  2. xml格式数据和数组数据互相转换

    数组转换成xml数据 <?php $arr=array( 'username'=>'huahua', 'password'=>'123456', 'number'=>'1588 ...

  3. 修改pycharm中的flask项目名遇到的坑

    曾修改过自己的项目名,并在settings中的解释器也更正过来了.然后执行pip list 报错: failed to create process. 解决方法如下: 到你的项目的venv目录下的Sc ...

  4. 2个快速制作完成一幅思维导图的iMindMap思维导图用法

    随着思维导图的流行,与其相关的思维导图制作软件如雨后春笋,纷纷进入我们的视野中,更让人难以选择.那想要入门的萌新该如何开始这个新的旅途呢? 各式各样的思维导图制作软件当中,有一个软件得到了大家一致的好 ...

  5. 常见的名片尺寸如何在CorelDRAW预设

    说到名片想必大家肯定不陌生,是我们生活中随处可见的物品,也是商家宣传必不可少的印刷物料.那么名片的尺寸是多少?我们做名片的时候该如何把握好名片的尺寸呢?在CDR中有专门的名片尺寸,下面小编就为大家简单 ...

  6. layui $().click() 失效问题

    //使用此点击事件失效 $(".sub2").on('click', function() { alert('响应点击事件'); }); //将指定的事件绑定在document上, ...

  7. workerman windows环境下无法启动问题

    问题描述 使用laravel框架composer加载workerman/gateway-worker扩展使用workerman做客服系统.通过laravel的command命令: php artisa ...

  8. Gin + 七牛云对象存储

    配置七牛云存储 创建存储空间 拿到密钥 安装七牛云对象存储SDK 推荐go.mod安装 // 将下面地址复制到go.mod,然后执行go mod download github.com/qiniu/a ...

  9. webgl智慧楼宇发光效果算法系列之高斯模糊

    webgl智慧楼宇发光效果算法系列之高斯模糊 如果使用过PS之类的图像处理软件,相信对于模糊滤镜不会陌生,图像处理软件提供了众多的模糊算法.高斯模糊是其中的一种. 在我们的智慧楼宇的项目中,要求对楼宇 ...

  10. 这 6 个 Spring Boot 项目够经典

    不得不佩服 SpringBoot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了. SmartAdmin 我们开源一套漂亮的代码和一套整洁 ...