目录
1、Maven 概述
写项目时,我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
1.1 Maven 的定义
Maven 是一个基于项目对象模型(POM)概念的纯 Java 开发的开源项目管理工具,主要用于管理 Java 项目,进行依赖管理(jar 包依赖管理)和项目构建(项目编译、打包、测试、部署),还能实现分模块开发,提高开发效率。
1.2 Maven 解决的问题
在传统项目开发中,存在诸多项目管理问题:
- 繁琐:每个项目都需要手动导入所需的 jar 包,且要搜集全部相关 jar 包。
- 复杂:项目中的 jar 包若需要版本升级,需重新搜集新的 jar 包。
- 冗余:相同的 jar 包在不同项目中重复保存,占用大量空间。
1.3 Maven 的核心特性与优势
- 依赖管理:通过在 pom.xml 文件中添加 jar 包的坐标,而非直接将 jar 包导入工程,避免了 jar 包直接引入的问题。当需要使用 jar 包时,Maven 会根据坐标到仓库中查找并获取。
- 一键构建:项目从编译、测试、运行、打包、安装到部署的整个构建过程都可由 Maven 管理,使用一个命令即可轻松完成。
- 分模块开发:常用于大型项目,可按层(如 dao、service、web)或按业务(如用户管理、订单管理、支付管理等)进行模块划分,提高开发效率。
2、Maven 安装
2.1 下载 Maven
进入Maven官网https://maven.apache.org/,按下图依次操作。
默认下载最高版本,如果需要下载其他版本,请页面下滑找到这个:
2.2 安装配置 Maven
Maven安装的前提需要先安装配置jdk
win+R输入cmd打开终端,查看jdk是否安装,如果没有显示版本号,请先安装jdk,安装时请注意jdk版本和maven的兼容要求。
找到“查看高级系统设置”,
2.3 测试安装
在cmd命令行窗口,输入指令mvn -v回车, 如下图所示,说明环境变量配置成功。
2.4 修改 Maven 本地仓库的默认路径
在Maven安装的根目录下,创建文件夹"repository"。
3、Maven 配置
3.1 配置本地仓库
在 Maven 的 conf 目录中有 settings.xml 配置文件,可按如下方式配置本地仓库:
3.2 配置 JDK
在 settings.xml 文件的profiles
标签中增加一个profile
标签,限定 Maven 项目默认的 JDK 版本:
<profiles>
<!-- java版本 -->
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
</profiles>
3.3 IDEA 配置本地 Maven
打开 IDEA(此处以2025.1.1.1版为例) ,按下图依次操作
4、Maven 仓库
4.1 仓库的概念
仓库是存储依赖的地方,体现为本地的一个目录。仓库中不仅存放依赖,还管理着每个依赖的唯一标识(坐标),Java 项目凭借坐标获取依赖。
4.2 仓库的分类
Maven 中的仓库主要分为本地仓库和远程仓库:
- 本地仓库:用于存储从远程仓库或中央仓库下载的插件和 jar 包。项目使用插件或 jar 包时,会优先从本地仓库查找。默认本地仓库位置在
${user.dir}/.m2/repository
,也可在 settings.xml 文件中配置。 - 远程仓库:若本地仓库中没有所需的插件或 jar 包,默认会从远程仓库下载。远程仓库可以在互联网内,也可以在局域网内,包括中央仓库、公共仓库和私服等。
4.3 本地仓库
即在 settings.xml 中配置的目录,使用过的依赖会自动存储在本地仓库中,以便后续复用。
4.4 远程仓库
4.4.1 中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,无需任何配置,Maven 中内置了中央仓库的地址http://repo1.maven.org/maven2。其中包含了绝大多数流行的开源 Java 构件,可通过https://mvnrepository.com/搜索需要的依赖信息。
4.4.2 公共仓库
除中央仓库外,还有其他远程仓库,如阿里云仓库http://maven.aliyun.com/nexus/content/groups/public/。由于中央仓库在国外,下载依赖速度较慢,因此通常会配置一个国内的公共仓库替代中央仓库。在 settings.xml 中添加如下配置:
<!--setting.xml中添加如下配置-->
<mirrors>
<mirror>
<id>aliyun</id>
<!-- 中心仓库的 mirror(镜像) -->
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<!-- aliyun仓库地址 以后所有要指向中心仓库的请求,都会指向aliyun仓库-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
4.4.3 私服
私服是架设在局域网的一种特殊远程仓库,目的是代理远程仓库及部署第三方构件。有了私服后,Maven 下载依赖时直接请求私服,私服上存在则下载到本地仓库;否则,私服会请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。私服可以解决企业开发中每次下载 jar 包只能自己使用,不能被其他开发人员使用的问题。可以通过 Nexus来创建、管理一个私服。
五、Maven 私服详解
5.1 私服的概念
私服是公司范围内共享的仓库,不对外开放,可通过 Nexus 等工具创建和管理。Maven 私服的概念就是在本地架设一个 Maven 仓库服务器,在代理远程仓库的同时维护本地仓库。当我们需要下载一些构件(artifact)时,如果本地仓库没有,再去私服下载,私服没有,再去中央仓库下载。
5.2 私服的架构
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如 Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。Nexus 是一个专门的 Maven 仓库管理软件,它不仅能搭建 Maven 私服,还具备如下一些优点使其日趋成为最流行的 Maven 仓库管理器:
- 提供了强大的仓库管理功能,构件搜索功能
- 它基于 REST,友好的 UI 是一个 ext.js 的 REST 客户端
- 它占用较少的内存
- 基于简单文件系统而非数据库
平时我们用的是阿里的共用maven服务器,但是在公司时,我们需要用到公司自研的jar包,这些jar包是私有的,所以在阿里的共用maven服务器中找不到,虽然我们也可以那个u盘来拷贝公司的私有jar包,但公司人这么多,一个个拷贝就太慢了,可以使用nexus搭建一个公司的私服,只需要连接公司的内网,配置好maven的settings.xml就可以在nexus中下载自己需要的jar包了
参考链接:
【附安装包】Maven下载、安装、配置与使用(保姆级教程)_java_程序员钟霖-GitCode 开源社区