Maven基础知识详解

1. 简介

  Maven在Java领域的应用已经非常广泛了,有了Maven的存在是的开发人员在搭建、依赖、扩展和打包项目上变得非常简单。

2. Windows安装Maven

  • 下载安装包
      http://maven.apache.org/download.cgi
  • 解压到安装目录,例如:D:maven
  • 配置环境变量
    • 新增MAVEN_HOME
    MAVEN_HOME
    D:mavenapache-maven-3.6.3
    
    • path中添加
    ;%MAVEN_HOME%in
    
    • 在控制台测试
    mvn -v
    
    • 出现版本信息等,即为安装成功
    • 配置本地仓库路径
    # 打开:D:mavenapache-maven-3.6.3confsettings.xml
    <localRepository>D:mavenmaven-repository</localRepository>
    
    • 配置阿里镜像仓库,加速下载
    # 打开:D:mavenapache-maven-3.6.3confsettings.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>
原文地址:https://www.cnblogs.com/cao-lei/p/13452172.html