maven介绍_1

maven定义

Maven 最核心、最基础的两个功能(依赖管理和项目构建)。

作为「项目工具」:Maven 是 Java 项目的 "标准化流水线",定义了从源码到打包的所有流程,确保所有人按同一规则构建项目; 作为「依赖管理工具」:Maven 是 Java 项目的 "自动管家",负责找包、下包、管版本、解冲突,让开发者无需关心依赖的底层细节。

Maven 中 JAR 包的核心分类(按用途): 业务依赖 JAR:支撑项目运行 / 测试(第三方 JAR、其他项目产物 JAR); 插件依赖 JAR:支撑 Maven 构建过程(仅构建时用,不参与项目运行)

maven的作用

1. 标准化的项目结构

这是 Maven 最伟大的贡献之一,甚至比依赖管理更重要。

  • 现状 :在没有 Maven 时,每个人项目的目录结构都不一样(src 放哪?lib 放哪?配置文件放哪?)。新人接手项目首先要花半天时间找代码。

  • Maven 的作用 :它强制规定了一套标准目录结构(如 src/main/java, src/test/resources 等)。

  • 价值:任何熟悉 Maven 的人,拿到任何 Maven 项目,无需看文档就知道代码在哪、测试代码在哪、配置文件在哪。这极大地降低了团队协作成本。

2.传递性依赖管理

  • 自动传递:引入 A,Maven 自动帮你把 B 和 C 都下载下来。

  • 冲突解决:Maven 有严格的"最短路径优先"和"声明优先"策略来解决版本冲突(虽然有时候需要人工干预,但它提供了机制)。

  • 范围控制 :可以指定依赖只在编译时有效(provided,如 Servlet API),还是只在测试时有效(test,如 JUnit),避免打入最终包中。

3.统一的生命周期

Maven 将构建过程标准化为三个主要阶段,每个阶段包含多个插件执行点:

  • Clean:清理旧构建。

  • Default (Build):验证 -> 编译 -> 测试 -> 打包 -> 集成测试 -> 验证 -> 安装 -> 部署。

  • Site:生成项目站点文档。

  • 价值 :无论项目多大,开发人员只需要记住几个命令(mvn clean install, mvn test),不需要关心底层是调用了 javac 还是 jar 命令,也不需要维护复杂的 shell 脚本。CI/CD(持续集成)工具(如 Jenkins, GitLab CI)也是基于这套标准生命周期来工作的。

4. 多模块项目管理

这是企业级开发必不可少的功能。

  • 场景 :大型系统通常拆分为 common (公共库), dao (数据层), service (业务层), web (表现层) 等多个子模块。

  • Maven 的作用:通过父 POM (Parent POM) 统一管理所有子模块的版本、依赖和插件配置。子模块之间可以互相引用,Maven 会自动处理构建顺序(先编译 common,再编译 dao...)。

  • 价值:避免了手动管理多个项目间的引用关系,实现了"一处修改版本,全局生效"。

5. 中央仓库与生态体系

  • 作用:Maven 背后有一个庞大的中央仓库(Maven Central),几乎所有开源 Java 库都在上面。

  • 价值 :开发者不需要去各个官网下载 jar 包,只需在 pom.xml 中写几行坐标(GroupId, ArtifactId, Version),Maven 自动下载。同时,私有仓库(如 Nexus, Artifactory)允许公司内部搭建自己的仓库,管理内部 jar 包和代理外部包,保障安全和速度。

讨论

  1. 理解目录结构 :为什么 src/main/javasrc/test/java 要分开?

  2. 深入依赖机制

    • 什么是 scope (compile, provided, runtime, test)?

    • 如何解决依赖冲突?(使用 mvn dependency:tree 命令查看树状图)。

  3. 熟悉生命周期mvn clean, mvn compile, mvn test, mvn package, mvn install, mvn deploy 分别做了什么?

  4. 多模块构建 :尝试创建一个父子工程,理解 标签的作用。

  5. 插件机制 :明白 Maven 本身只是个框架,具体干活(编译、打包、生成文档)的都是插件(如 maven-compiler-plugin, maven-surefire-plugin)。

maven安装目录结构

  1. bin 目录 该目录包含 Maven 的可执行脚本文件,是 Maven 命令的入口。 例如在 Windows 系统中,有 mvn.cmd、mvnDebug.cmd 等脚本 通过这些脚本,你可以在命令行中执行 mvn clean、mvn install 等 Maven 命令,完成项目构建、依赖管理等操作。

  2. boot 目录 该目录存放 Maven 的启动器依赖,核心是 plexus-classworlds 相关的 jar 包。 plexus-classworlds 是一个类加载框架,Maven 借助它来实现自定义的类加载机制,从而启动 Maven 运行时环境。

  3. conf 目录 该目录包含 Maven 的全局配置文件,最核心的是 settings.xml。 settings.xml 用于配置 Maven 的全局行为,比如: 指定本地仓库的路径(即依赖包本地存储的位置); 配置远程镜像仓库(如阿里云镜像,用于加速依赖下载); 设置代理、认证信息等。

  4. lib 目录 该目录包含 Maven 运行所需的所有依赖库(jar 包)。

maven环境变量设置

一、前提:配置 JAVA_HOME Maven 依赖 Java 运行环境,因此必须先配置 JAVA_HOME(指向已安装的 JDK 目录,如 Java 17 的安装路径)。 二、配置 Maven 自身的环境变量(MAVEN_HOME 与 Path) 三、测试环境配置结果 打开新的命令提示符(CMD),输入 mvn -v 并回车。若输出 Maven 版本、Java 版本等信息,说明配置成功。 通过以上步骤,Maven 就能在系统中全局可用,无论是命令行执行 Maven 命令,还是在 IDE(如 IntelliJ IDEA)中集成 Maven,都能正常工作。

配置阿里云镜像

1、Maven 的中央仓库(Maven Central)的主服务器位于美国。在中国大陆直接连接美国的服务器,受到跨国带宽限制、网络波动以及防火墙(GFW)的影响,下载速度往往只有几 KB/s,甚至经常连接超时(Connection Timeout)。

阿里云在国内拥有多个数据中心,提供了专门针对国内网络优化的 Maven 镜像站。

2、配置步骤

1)创建一个H:\mymavenlocation\repository作为我们maven的本地仓库,不然它会默认放在:C:\Users\陈晓东下。

2)然后在H:\mymavenlocation\apache-maven-3.9.11-bin\apache-maven-3.9.11\conf\setting.xml文件中配置:

复制代码
<localRepository>H:\mymavenlocation\repository</localRepository>

3)打开 settings.xml 文件,在 <mirrors> 标签内添加阿里云中央仓库镜像的配置: xml 3、验证配置 配置完成后,打开新的命令行窗口,执行 mvn help:system 命令。Maven 会尝试下载依赖,此时观察日志中依赖的下载地址,若显示为 https://maven.aliyun.com/...,则说明镜像配置成功。

XML 复制代码
 <!-- 阿里云中央仓库镜像 -->
    <mirror>
      <!-- 镜像唯一标识 -->
      <id>nexus-aliyun</id>
      <!-- 镜像替代的中央仓库(central 表示替代官方中央仓库) -->
      <mirrorOf>central</mirrorOf>
      <!-- 镜像名称 -->
      <name>Nexus aliyun</name>
      <!-- 镜像地址(阿里云 Maven 公共仓库) -->
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

下载资源

然后分享了maven仓库的地址;以及在 mvnrepository.com 下载坐标的步骤

我们先分享maven仓库的地址:

https://mvnrepository.com/

二、在 mvnrepository.com 下载坐标的步骤

1、搜索目标依赖 打开网站 https://mvnrepository.com/,在顶部搜索框输入依赖名称(如 Eclipse Collections、druid),点击搜索图标。

2、选择匹配的依赖 在搜索结果中,找到与需 在搜索结果中,找到与需求匹配的依赖(通过 groupId 和 artifactId 确认,如 org.eclipse.collections >> eclipse-collections),点击进入详情页。 3、选择版本号 进入依赖详情页后,会显示所有可用版本(按时间排序,最新版本通常在顶部),根据项目兼容性选择版本(如 12.0.0.M21),点击版本号。

4、复制坐标配置代码,粘贴到项目 pom.xml 中 保存文件后,Maven 会自动从远程仓库下载该依赖到本地仓库 进入依赖详情页后,会显示所有可用版本(按时间排序,最新版本通常在顶部),根据项目兼容性选择版本(如 12.0.0.M21),点击版本号。

仓库

仓库:用于存储资源,包含各种jar包 Maven 仓库分为本地仓库和远程仓库两大类,远程仓库又细分为中央仓库和私服。

  1. 本地仓库 定义:是你自己电脑上的一个目录,用于存储从远程仓库下载的资源,也可存储你本地项目构建生成的构件(如自己开发的 jar 包)。 作用:当项目需要依赖资源时,Maven 会先从本地仓库查找;若找不到,再去远程仓库下载,避免重复下载,提升构建效率。 配置:可通过 Maven 配置文件 settings.xml 中的 <localRepository> 标签指定路径(如 D:/Java/maven-repository)。

  2. 远程仓库 1)定义:位于远程服务器上的仓库,为本地仓库提供资源补充。 2)中央仓库:由 Maven 官方团队维护,是开源资源的 "总库",存储了几乎所有公开的开源依赖(如常见的框架、工具类库)。默认情况下,Maven 会自动连接中央仓库下载资源。

3)私服:由企业或团队在内部搭建的私有远程仓库,通常从中央仓库同步开源资源,同时存储企业内部的私有资源(如自主研发的 jar 包、购买的商业版权库)。

仓库的工作流程(结合图示理解)

当项目通过 Maven 构建需要依赖时,流程如下: Maven 先检查本地仓库,若找到所需资源,直接使用。 若本地仓库没有,Maven 会连接私服(若配置了私服),从私服查找;若私服有,下载到本地仓库后使用。 若私服也没有,Maven 会连接中央仓库,下载资源到本地仓库后使用。

maven坐标(GAVC)

Maven工程的 GAVP 指的是 Group、Artifact、Version、Packaging。这是 Maven 项目的基本坐标,用于唯一标识和定位项目。

格式为 :

groupId:artifactId:version(:classifier),

各元素作用如下: 1)groupId:组织 / 项目的唯一标识,通常用域名倒写(如公司域名 com.alibaba、开源组织 org.eclipse),避免同名冲突。 2)artifactId:具体项目或模块的名称(如 druid 连接池、eclipse-collections 集合框架),是组织内部的唯一标识。 3)version:资源版本号,格式通常为 主版本.次版本.修订号(如 1.0.0),快照版本会加 -SNAPSHOT(如 2.0.0-SNAPSHOT)。 4)classifier(可选):用于区分同一版本的不同变体,如 sources(源码包)、javadoc(文档包)、android(安卓适配包)。

注意:packaging(打包类型,如 jar/war/pom)不是坐标元素,它仅影响项目构建逻辑,它会告诉 Maven 这个项目该怎么编译、怎么打包(生成 .jar 还是 .war),以及作为依赖时被引用时的默认文件类型。

XML 复制代码
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>33.0.0-jre</version>
    <!-- classifier 和 packaging 通常不直接写在 dependency 标签里,除非需要特殊指定 -->
    <!-- 如果我们需要它的源码包,会加上 classifier -->
    <!-- <classifier>sources</classifier> --> 
    <!-- <type>jar</type> (默认就是 jar,通常省略) -->
</dependency>

总结: 坐标定位置,Packaging 定行为,Classifier 定变种

总结

1、本文首先介绍了mave的作用,标准化的项目管理,传递性依赖管理,统一的生命周期;多模块项目管理;中央仓库和生态体系进行论证;然后通过几个问题对此知识点进行考验;

2、然后介绍了maven几个安装目录的结构:bin目录(Maven 命令的入口);boot 目录;conf 目录(包含了如 settings.xml等全局配置文件);lib目录(包含 Maven 运行所需的所有依赖库:jar包)

3、然后介绍了maven的环境变量设置,包括配置环境变量 JAVA_HOME,MAVEN_HOME;以及用mvn -v 命令进行验证;

6、然后分享了maven仓库的地址;以及在 mvnrepository.com 下载坐标的步骤

7、又介绍了maven配置阿里云镜像的原因(追求下载资源的速度),配置步骤(在settings.xml 文件中操作),验证配置的方法;

8、接着介绍了仓库的概念;本地仓库(定义;作用,配置方式);远程仓库(中央仓库和私服的定义);再介绍了下载jar包的工作流程;

9、又介绍了maven坐标,介绍其组成元素(groupid组织标识;artifactId模块名;version资源版本名;classifier)的定义和格式;并拓展了packaging(打包类型,如 jar/war/pom)决定了该项目的编译,打包方式以及作为依赖时被引用时的默认文件类型 ;

另:下一篇文章我们再详细的来介绍一下maven的最核心作用:依赖管理和项目构建。

相关推荐
小钻风33662 小时前
Java函数式编程-lambda表达式
java·开发语言·python
Han.miracle2 小时前
Spring IoC 与 DI 思想及实践详解
java
Irissgwe2 小时前
基础I/O
java·linux·前端
木易 士心2 小时前
Java中 synchronized 和 volatile 详解
java·开发语言·jvm
小码狐2 小时前
Spring相关知识【知识整理】
java·后端·spring
巫山老妖2 小时前
多 Agent 协作实战:我用 3 只龙虾组了个「AI小分队」,效率直接翻倍
java·前端
xienda2 小时前
Spring Boot 核心定义与用处
java·spring boot·后端
直有两条腿2 小时前
【Spring Boot】原理
java·spring boot·后端
一只叫煤球的猫2 小时前
用这个框架彻底摆脱Controller,从此专注业务——ArcRoute
java·spring·开源