Maven

发布于:2025-07-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

Maven 的核心概念

Maven 的作用

Maven 仓库类型

本地仓库(补充)

作用

本地仓库路径:

修改本地仓库路径

验证新仓库配置是否生效

常见问题

从零开始配置 Maven

安装 Maven

配置 Maven 仓库

在 IDEA 中应用配置

依赖找不到:

检查依赖冲突


Maven 的核心概念

Maven 的作用

  • 帮助自动下载和管理项目依赖(第三方库,如 Spring、Hibernate 等)。
  • 默认从 Maven 中央仓库(Central Repository) 下载依赖,但国内访问较慢,通常需要配置国内镜像(如阿里云)。

Maven 仓库类型

本地仓库(Local Repository):

  • 默认在 C:\Users\你的用户名\.m2\repository,存储已下载的依赖。

远程仓库(Remote Repository):

  • 中央仓库(Central):Maven 官方仓库,默认使用。
  • 镜像仓库(Mirror):如阿里云仓库,用于加速下载。
  • 私有仓库(如 Nexus、JFrog Artifactory):公司内部使用。

本地仓库(补充)
  1. 当你首次构建项目时,Maven 会从远程仓库(如 Maven Central)下载依赖(JAR 文件等)。

  2. 这些依赖会被缓存到本地仓库(~/.m2/repository)(~:用户主目录)。

  3. 后续构建时,Maven 会优先从本地仓库读取依赖,避免重复下载

作用
  • 离线可用:一旦依赖被下载到本地,即使断网也能构建项目。
  • 加速构建:避免每次构建都从远程下载。
  • 共享依赖:同一台机器上的所有 Maven 项目共享本地仓库。

本地仓库路径

Linux

/home/username/.m2/repository
(例如:/home/li/.m2/repository

Windows

C:\Users\username\.m2\repository
(例如:C:\Users\li\.m2\repository

修改本地仓库路径

可以在 Maven 的配置文件 settings.xml(Maven 安装目录的 conf/settings.xml) 中指定其他路径

<settings>
  <localRepository>/path/to/your/custom/repository</localRepository>
</settings>

验证新仓库配置是否生效

运行以下命令,查看 Maven 实际使用的配置(包括解析后的 localRepository 路径):

mvn help:effective-settings

如果输出的 <localRepository> 是你自定义的路径,说明配置已生效。

常见问题

IDE 缓存问题

如果你使用 IDE(如 IntelliJ/Eclipse),可能需要:

  • 刷新 Maven 项目(Reimport)。
  • 清理 IDE 缓存(File → Invalidate Caches)。

从零开始配置 Maven

安装 Maven

  1. 下载 Apache Maven(如 apache-maven-3.9.5-bin.zip)。

  2. 解压到任意目录(如 D:\apache-maven-3.9.5)。

  3. 配置环境变量(确保命令行可用 mvn):

# 系统变量新增:
MAVEN_HOME = maven安装地址
PATH = %MAVEN_HOME%\bin

     4. 验证安装:        

mvn -v

应输出 Maven 版本信息。

配置 Maven 仓库

找到 Maven 的 settings.xml:

  • 默认路径:apache-maven-3.9.5/conf/settings.xml
  • 用户级路径(推荐,避免影响其他用户,个性化配置):~/.m2/settings.xml(若不存在,可复制 conf/settings.xml 过来修改)。

配置本地仓库路径(可选):

<settings>
    <localRepository>仓库地址</localRepository>
</settings>

如果不配置,默认使用 ~/.m2/repository 

配置阿里云镜像(加速下载)

<mirrors>
    <mirror>
        <id>aliyun</id>
        <name>Aliyun Maven Mirror</name>
        <url>https://maven.aliyun.com/repository/public</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

这样所有对 central(中央仓库)的请求都会走阿里云镜像

在 IDEA 中应用配置

File > Settings > Build, Execution, Deployment > Build Tools > Maven

  • Maven home path: 选择你的 Maven 安装目录

  • User settings file: 指定你的 settings.xml

  • Local repository: 会自动读取 settings.xml 中的配置。

刷新 Maven 项目

  • 在 IDEA 右侧 Maven 面板 点击 刷新按钮(Reload All Maven Projects)。

测试依赖下载

在 pom.xml 中添加一个依赖(如 Spring Boot)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

如果配置正确,Maven 会自动从阿里云镜像下载依赖到本地仓库。

依赖找不到:

(1) 阿里云镜像未正确配置
检查 settings.xml 是否真的生效:

  • 确保 mirrorOf 是 central(覆盖默认中央仓库)。
  • 确保 IDEA 使用的是正确的 settings.xml。

(2) 依赖不在阿里云仓库

  • 阿里云镜像默认只代理 Maven Central,如果依赖在 其他仓库,需要额外配置(可以在setting.xml中配置,也可以在项目的pom.xml中配置)

settings.xml

<settings>
    <profiles>
        <profile>
            <id>aliyun-repos</id>
            <repositories>
                <repository>
                    <id>aliyun-sdk</id>
                    <url>https://maven.aliyun.com/repository/aliyun-sdk</url>
                </repository>
            </repositories>
            <activation>
                <activeByDefault>true</activeByDefault>  <!-- 默认激活 -->
            </activation>
        </profile>
    </profiles>
</settings>

pom.xml

<repositories>
   
    <!-- 阿里云 SDK 专属仓库 -->
    <repository>
        <id>aliyun-sdk</id>
        <url>https://maven.aliyun.com/repository/aliyun-sdk</url>
    </repository>
</repositories>

(3) 依赖版本不存在

  • 检查 pom.xml 中的 groupIdartifactIdversion 是否正确:

           去 Maven Central 或 阿里云仓库 搜索确认。

如果阿里云仓库没有该版本,尝试直接下载 JAR

从阿里云官方文档或 SDK 发布页面手动下载 JAR,然后安装到本地仓库

检查依赖冲突

运行以下命令,查看依赖树是否有冲突:

mvn dependency:tree

如果存在版本冲突,在 pom.xml 中排除冲突的依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ocr</artifactId>
    <version>4.5.0</version>
    <exclusions>
        <exclusion>
            <groupId>冲突的groupId</groupId>
            <artifactId>冲突的artifactId</artifactId>
        </exclusion>
    </exclusions>
</dependency>