Skip to content

二、Maven基础

一、概述

Maven是专门用于管理和构建Java项目的工具,它的主要功能有

  1. 提供了一套标准化的项目结构
  2. 提供了一套标准化的构建流程(编译,测试,打包,发布....)
  3. 提供了一套依赖管理机制

1、项目结构

2、仓库

  • 仓库:用于存储资源,包含各种jar包

  • 仓库分类:

    • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
    • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源
      • 中央仓库:Maven团队维护,存储所有资源的仓库
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
  • 私服的作用:

    • 保存具有版权的资源,包含购买或自主研发的jar
      • 中央仓库中的jar都是开源的,不能存储具有版权的资源
    • —定范围内共享资源,仅对内部开放,不对外共享

3、坐标


(1)什么是坐标

介绍:Maven中的坐标用于描述仓库中资源的位置

网址:https://repo1.maven.org/maven2/

(2)Maven坐标主要组成

groupld(组织ID):定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.mybatis)

artifactld(项目ID):定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)

version(版本号):定义当前项目版本号

packaging:定义该项目的打包方式

(3)Maven坐标的作用

使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

(4)查询Maven坐标

网址:https://mvnrepository.com

2、依赖管理

依赖管理就是管理项目所依赖的第三方资源(jar包、插件)

(1)pom.xml文件管理坐标

例:引入mysql驱动坐标

xml
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

(2)刷新maven查看效果


二、安装与配置

1、下载maven

官网:http://maven.apache.org/

网盘链接:https://www.123pan.com/s/QvTuVv-REjw.html

2、修改setting.xml文件


(1)修改本地仓库地址

xml
<localRepository>存放地址</localRepository>


(2)修改阿里云镜像


xml
<mirrors>
    <!-- 配置具体的仓库的下载镜像 -->
	<mirror>
        <!-- 此镜像的唯一标识符,用来区分不同的mirror元素 -->
		<id>nexus-aliyun</id>
         <!-- 对哪种仓库进行镜像,简单来说就是替代那个仓库 -->
    	<mirrorOf>*</mirrorOf>
         <!-- 镜像名称 -->
   		<name>Nexus aliyun</name>
         <!-- 镜像url -->
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>
</mirrors>

3、配置环境变量


(1)新增环境变量



(2)加入环境变量


三、依赖管理

1、依赖配置模版

xml
<!--设置当前项目所依赖的所有jar-->
<dependencies>
    <!--设置具体的依赖-->
    <dependency>
        <!--依赖所属群组id-->
        <groupId>Junit</groupId>
        <!--依赖所属项目id-->
        <artifactId>Junit</artifactId>
        <!--依赖版本号-->
        <version>4.12</version>
    </dependency>
</dependencies>

2、依赖传递

依赖具有传递性,分两种

(1)直接依赖:在当前项目中通过依赖配置建立的依赖关系

(2)间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源

3、依赖传递冲突

三种优先法则

(1)路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高

(2)声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的

(3)特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的

4、可选依赖

可选依赖指的是对外隐藏当前所依赖的资源➡不透明

加一个<optional> 标签

xml
<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        <optional>true</optional>
    </dependency>
</dependencies>

5、排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

xml
<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
    </dependency>
</dependencies>

6、依赖范围

通过设置坐标的依赖范围(scope),可以设置对应jar的作用范围

  1. 编译环境
  2. 测试环境
  3. 运行环境
依赖范围编译classpath测试classpath运行classpath例子
compileYYYlogback
test-Y-Junit
providedYY-servlet-api
runtime-YYjdbc驱动
systemYY-存储在本地的jar包
import引入DependencyManagement
  • <scope>:默认值compile

四、手动安装依赖

1、下载jar包

网址:https://mvnrepository.com

2、安装jar包

1、语法

bash
mvn install:install-file -Dfile=jar包路径 -DgroupId=jar包所属群组id -DartifactId=jar包所属项目id -Dversion=jar包版本号 -Dpackaging=jar

2、使用

bash
C:\Users\31190>mvn install:install-file -Dfile=E:\code\java\spring-boot-starter-websocket-3.2.5.jar -DgroupId=org.spring
framework.boot -DartifactId=spring-boot-starter-websocket -Dversion=3.2.5 -Dpackaging=jar

3、效果

bash
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- install:3.1.2:install-file (default-cli) @ standalone-pom ---
[INFO] pom.xml not found in spring-boot-starter-websocket-3.2.5.jar
[INFO] Installing E:\code\java\spring-boot-starter-websocket-3.2.5.jar to D:\Config\MAVEN\resources\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.jar
[INFO] Installing C:\Users\31190\AppData\Local\Temp\mvninstall9767424104691847731.pom to D:\Config\MAVEN\resources\org\springframework\boot\spring-boot-starter-websocket\3.2.5\spring-boot-starter-websocket-3.2.5.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.466 s
[INFO] Finished at: 2024-08-19T15:42:12+08:00
[INFO] ------------------------------------------------------------------------

五、生命周期和插件

1、流程图

maven对项目构建的生命周期划大致分为3套

  1. clean:清理工作
  2. default:核心工作,例如编译,测试,打包,安装等
  3. site:产生报告,发布站点等

同一生命周期内,执行后边的命令,前边的所有命令会自动执行

2、clear生命周期

  • clean:清理工作

  • pre-clean:执行一些在clean之前的工作

  • clean:移除上一次构建产生的所有文件

  • post-clean:执行一些在clean之后立刻完成的工作

3、default生命周期

default:核心工作,例如编译,测试,打包,部署等

4、site生命周期

  • pre-site:执行一些在生成站点文档之前的工作

  • site:生成项目的站点文档

  • post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

  • site-deploy:将生成的站点文档部署到特定的服务器上

  • complie:编译

    bash
    mvn complie
  • clean:清理

    bash
    mvn clean
  • test:测试

    bash
    mvn test
  • package:打包

    bash
    mvn package
  • install:安装

    bash
    mvn install

5、插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
  • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
  • 插件还可以完成一些自定义功能

插件的配置方式如下:我们以打包源码为例

xml
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <excution>
                    <goals>
                        <!--当goal属性的值为test-jar时,是对测试代码打包-->
                        <goal>jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </excution>
            </executions>
        </plugin>
    </plugins>
</build>