Nexus 组件与资产:搞懂这两个概念,你才算真正理解了仓库存储结构
在 Nexus 的后台逛久了你一定会注意到两个词Component和Asset。打开一个仓库左边是树形结构的文件夹组件点开后能看到具体的 Jar 包、pom 文件资产。在 API 返回的 JSON 里每个组件下面又挂着一串资产列表。它们到底有什么区别为什么要分这么细Docker 镜像的存储又有什么特殊之处今天这篇文章我们就来彻底搞懂 Nexus 中的组件与资产。一、组件 vs 资产抽象与具体组件Component是 Nexus 对上传内容的高层抽象。可以理解为你上传的一个“整体”——一个应用、一个 Jar 包、一个 Docker 镜像在 Nexus 里就是一个组件。在仓库的浏览界面里组件呈现为树形结构的顶层文件夹。比如com/example/java-maven-app就是一个组件。资产Asset是组件包含的实际物理文件。一个组件可以包含一个或多个资产。点开一个组件你看到的那些具体文件就是资产Jar 包pom.xmlmaven-metadata.xml校验文件.md5、.sha1 等一句话总结组件是“逻辑概念”资产是“物理文件”。二、组件与资产的关系1 个组件 1 个或多个资产在 Maven 仓库里一个组件比如my-app:1.0.0通常包含一个 Jar 包资产一个 pom 文件资产若干元数据文件和校验文件资产在 Nexus 的 API 返回结果中每个组件对象下都有一个assets数组里面就是该组件的所有资产。三、Docker 仓库的特殊处理Docker 仓库的资产复用机制是 Nexus 一个很精妙的设计。在 Docker 中镜像是由一层一层的 Layer 堆叠而成的。每个 Docker 层本身就是一个资产有唯一标识。如果一个基础层被多个镜像共用那么每个镜像是一个独立的组件这些组件共享同一个基础层资产比如镜像 A 和镜像 B 都基于同一个 Node.js 基础镜像在 Nexus 里这个 Node.js 基础层只存储一次两个镜像组件都指向同一个资产这就是 Docker 仓库节省存储空间的核心原理。四、Nexus 的统一抽象不管你是用 Maven 传 Jar 包、用 npm 传包、用 Docker 传镜像还是直接传一个 Zip 压缩包——在 Nexus 里它们统一被称为组件Component。这个统一抽象的好处是无论什么格式都用同一套 API 管理无论什么工具都用同一套逻辑存储无论什么仓库都用同一个概念理解五、实际查看组件与资产在 Nexus 后台进入Browse→ 选择一个仓库比如 maven-snapshots左侧树形结构展示的是组件按 groupId/artifactId 组织点击某个组件展开后看到的是该组件的资产具体文件在 API 中curl -u user:pass http://nexus:8081/service/rest/v1/components?repositorymaven-snapshots返回的 JSON 里每个组件都有assets数组包含该组件的所有资产信息文件名、下载地址等。写在最后组件和资产是 Nexus 存储模型的两个核心概念。组件你上传的“东西”资产这个“东西”包含的“文件”搞懂了它们你就搞懂了 Nexus 里文件是怎么组织、怎么存储、怎么复用的。下次你在 Nexus 后台看到那一排文件夹和文件就不会觉得乱了——文件夹是组件文件是资产就这么简单。