Maven仓库

Maven 仓库标准总结:

Maven 仓库实际上是一种规范标准,定义了依赖包的组织结构、命名方式、元数据描述和交互方式。

  • 依赖的唯一标识:groupIdartifactIdversionpackagingclassifier

  • 文件组织结构:groupId/artifactId/version/文件

  • 元数据要求:pom 文件描述依赖关系和版本信息

解析:

字段 含义 唯一性 示例
groupId 组织/公司/项目组 全局唯一 com.google.guava
artifactId 库或模块名 同 groupId 下唯一 guava
version 版本号 groupId+artifactId+version 唯一 31.1-jre

组合起来就是 Maven 仓库中唯一的一个依赖:

复制代码

com.google.guava:guava:31.1-jre

这是 Maven/Gradle 中典型的依赖坐标(dependency coordinate),唯一标识一个库。

Maven仓库分为:

  • 本地仓库:~/.m2/repository

  • 中央仓库:https://repo1.maven.org/maven2/

  • 私有仓库:Nexus、Artifactory 等

Maven 仓库本身是一个标准(规范),它规定了依赖文件如何组织和标识;实际存放依赖文件的仓库地址(本地/中央/私有仓库)是这个标准的实现。

中央仓库(Central Repository):

定义

  • Maven 官方提供的公开仓库,用来存放开源库和大部分常用依赖

  • 所有 Maven/Gradle 项目默认都会从中央仓库下载依赖

特点

  • 公开可访问:任何人都可以使用,无需注册

  • 稳定可靠:官方维护,库版本齐全

  • URL 示例https://repo1.maven.org/maven2/

  • 用途:快速获取大多数开源依赖,如 Guava、Apache Commons、JUnit 等

2️⃣ 私有仓库(Private Repository)

定义

  • 企业或个人自建的仓库,用来存放内部依赖或镜像

  • 可以存放公司自研库、私有库,或者中央仓库的镜像

特点

  • 访问控制:可设置权限,仅公司内部可访问

  • 依赖管理:保证内部库统一版本,便于团队协作

  • 镜像作用:加速依赖下载,尤其是国内网络访问中央仓库慢的情况

  • 常见工具:Nexus、Artifactory、Harbor 等

Nexus = 一个安装的软件工具 + 内置 Web 界面 + HTTP 接口 + 文件存储管理系统

用于管理私有仓库,让用户上传、下载和维护依赖,内部遵循 Maven 仓库标准。

1️⃣ 镜像库的概念

  • 镜像库(Mirror) = 远程仓库的"完整副本"

  • 原理:

    1. 阿里或腾讯在国内建立一个服务器

    2. 定期或按需同步 Maven Central 的内容

    3. 用户访问镜像库时,如果需要的依赖已经缓存,直接从国内服务器下载

    4. 如果依赖没缓存,镜像库会从中央仓库拉取、缓存,然后提供给用户

核心目标:解决访问中央仓库慢或不稳定的问题,尤其在国内网络环境下,速度更快、稳定性更高。

如何从Maven下载三方库呢?

2️⃣ 使用 Gradle 下载

如果是 Android 或 Gradle 项目:

Groovy 复制代码
1. 使用 Gradle 下载

如果是 Android 或 Gradle 项目:

在 build.gradle 中添加:

repositories {
    maven { url "https://maven.aliyun.com/repository/public" } // 可用国内镜像
    google()
    mavenCentral()
}

dependencies {
    implementation 'com.tencent:mmkv:1.3.14'
}

Gradle 会自动下载 mmkv 到本地缓存:~/.gradle/caches/modules-2/files-2.1/com.tencent/mmkv/1.3.14/...

2.直接从仓库网页下载

  • 打开 Maven 搜索网站或镜像网站:

  • 搜索 com.tencent:mmkv:1.3.14

  • 下载所需文件:

    • aar(Android 库)

    • pom(元数据)

    • sources.jar / javadoc.jar(源码 / 文档)

gradle下载的原理:

Android 项目中 Gradle 下载依赖的原理 其实就是:
根据依赖坐标 → 去仓库查找 → 下载文件 → 缓存到本地 → 构建时使用。

我给你按完整流程讲清楚。

1️⃣ Gradle 依赖的核心标识 GVA(坐标)

例如:

java 复制代码
implementation 'com.tencent:mmkv:1.3.14'

这里包含 Maven 坐标

字段 含义
groupId com.tencent
artifactId mmkv
version 1.3.14

Gradle 会根据这些信息拼接仓库路径。

2️⃣ Gradle 查找仓库

Gradle 会按照 repositories 的顺序查找依赖:

Groovy 复制代码
repositories {
    google()
    mavenCentral()
    maven { url "https://maven.aliyun.com/repository/public" }
}

查找顺序:

Groovy 复制代码
google()
   ↓
mavenCentral()
   ↓
阿里镜像

哪个仓库先找到就用哪个。

3️⃣ 拼接 Maven 仓库路径

Gradle 会把 Maven 坐标转换为 标准仓库路径

坐标:

java 复制代码
com.tencent:mmkv:1.3.14

转换为路径:

java 复制代码
com/tencent/mmkv/1.3.14/

完整 URL:

java 复制代码
https://repo.maven.apache.org/maven2/com/tencent/mmkv/1.3.14/

打开这个链接:如下所示,这就是这个库在整个maven仓库中的所有文件

https://repo.maven.apache.org/maven2/com/tencent/mmkv 要看有哪些库直接把版本先去掉

然后下载:

java 复制代码
mmkv-1.3.14.aar
mmkv-1.3.14.pom

4️⃣ 解析 POM 文件

Gradle 会先下载:

java 复制代码
mmkv-1.3.14.pom

POM 文件里包含:

  • 依赖库

  • 版本信息

  • 打包类型

  • transitive dependencies(传递依赖)

例如:

mmkv

├── dependency A

├── dependency B

Gradle 会继续递归下载这些依赖。

5️⃣ 下载并缓存到本地

下载后的文件会存到本地缓存:

Mac/Linux:

java 复制代码
~/.gradle/caches/modules-2/files-2.1/

例如:

java 复制代码
~/.gradle/caches/modules-2/files-2.1/com.tencent/mmkv/1.3.14/

里面会有:

下次构建就不会再下载。

6️⃣ Gradle 构建时使用依赖

Gradle 构建 APK 时:

java 复制代码
AAR
 ↓
解压
 ↓
classes.jar
resources
AndroidManifest
 ↓
参与编译

7️⃣ Gradle 下载完整流程

java 复制代码
build.gradle 声明依赖
        │
        ▼
解析 Maven 坐标
com.tencent:mmkv:1.3.14
        │
        ▼
按顺序查找仓库
google → mavenCentral → mirror
        │
        ▼
拼接 Maven 仓库路径
/com/tencent/mmkv/1.3.14/
        │
        ▼
下载 POM
        │
        ▼
解析传递依赖
        │
        ▼
下载 aar/jar
        │
        ▼
缓存到 ~/.gradle
        │
        ▼
参与构建 APK
相关推荐
行者-全栈开发3 小时前
Maven settings.xml 最全配置详解,看这一篇就够了
maven·本地仓库·依赖管理·开发环境搭建·maven 配置·镜像源配置·私有仓库认证
惊讶的猫7 小时前
maven介绍_1
java·maven
Lyyaoo.1 天前
What is Maven?
java·spring boot·maven
StackNoOverflow1 天前
Maven 核心知识整理
java·maven
愤怒的苹果ext1 天前
github项目的jar包上传到maven中央仓库
github·maven·jar·中央仓库
Hui Baby1 天前
Maven 标签大全
maven
xiaoye37081 天前
CentOS 7 搭建Maven私服
java·maven
qq_4924484461 天前
Maven直接下载jar包
数据库·maven·jar
ノBye~1 天前
Maven聚合项目搭建
java·maven