当前位置: 首页 > article >正文

Maven 仓库的分类

Maven 是一个广泛使用的项目构建和依赖管理工具,在 Java 开发生态中占据重要地位。作为 Maven 的核心概念之一,仓库(Repository)扮演着至关重要的角色,用于存储项目的依赖、插件以及构建所需的各种资源。

了解 Maven 仓库的分类和用途,不仅能够帮助开发者有效管理项目依赖,还能提升构建过程的稳定性与效率。本章将系统介绍 Maven 仓库的分类,包括本地仓库、远程仓库和中央仓库,以及它们之间的协作关系。这为您在实际开发中优化依赖管理策略、提高开发效率提供坚实的理论基础。

无论您是初学者还是有经验的开发者,希望这部分内容能够为您在 Maven 的使用中提供清晰的指引。


文章目录

      • 1、Maven 的仓库分类
      • 2、本地仓库
      • 3、远程仓库


1、Maven 的仓库分类

Maven 仓库的类型一般可以分为 2 种:即本地仓库、远程仓库。

2、本地仓库

本地仓库(Local),是存在于本地的一个仓库,它用来缓存下载的依赖包。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。默认情况下,不管 Linux 还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,可以在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义新路径。

  <!-- interactiveMode
   | This will determine whether maven prompts you when it needs input. If set to false,
   | maven will use a sensible default value, perhaps based on some other setting, for
   | the parameter in question.
   |
   | Default: true
  <interactiveMode>true</interactiveMode>
  -->
	<localRepository>~/.m2/repository</localRepository>

3、远程仓库

远程仓库(Remote),如其名字所述,其实位于远程服务器的一个仓库。它是开发人员自己定制仓库(一般公司会自己定制一个远程仓库),包含了所需要的代码库或者其他工程中用到的 .jar 文件。

Maven 的远程仓库,一般可以在项目 POM 文件的 repositories 标签中定义,或者也可以在项目 POM 文件中的 profiles/profile/repositories 标签以及 conf/setting.xml 文件中的 profiles/profile/repositories 标签中定义。

在网上其他资料中,还会提到 Maven 仓库有另一个类型 —— 中央仓库(Central),它其实是一个特殊的远程仓库。Maven 中央仓库是由 Maven 社区提供的仓库,绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的 Java 项目依赖的构件都可以在这里下载到。另外一个特殊之处在于,中央仓库的地址是内置在 Maven 源码中的,即默认会向中央仓库拉取依赖。

Maven 仓库的查找顺序:Local Repository > settings_profile_repo > pom_profile_repo (子) > pom_repositories (子) > parent_pom_profile_repo (父) > parent_pom_repositories (父) > settings_mirror > Central Repository

此外,Maven 中还会有一个镜像仓库的概念,它由 conf/setting.xml 文件中的 mirrors 标签定义。其相当于一个拦截器,当镜像仓库mirror/mirrorOf 值与远程仓库 repository/id 相同时,远程仓库会被拦截,转而使用镜像仓库地址地址。只有镜像仓库找不到依赖时,Maven 才会回退并访问被代理的仓库。

配置范例如下:

<!--使用私有仓库替换 Maven 默认的中央仓库 -->
<mirrors>
    <mirror>
        <!--镜像的唯一标识,在 mirror 标签中,其实没啥用 -->
        <id>aliyun</id>   
        <!--仓库描述 -->
        <name>xx公司私有仓库地址</name> 
        <!--私有仓库地址,这个很重要不能错-->
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <!--`central` 为 Maven 中央仓库的标识,替换 Maven 源码内默认的是中央仓库地址-->
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

如上图配置所示,Maven 会用 http://maven.aliyun.com/nexus/content/groups/public/ 这个仓库镜像替换 Maven 中央仓库,其中 central 是 Maven 中央仓库的 ID 标识。我们经常说用阿里云的 Maven 仓库可以提速,其实就是使用这种方法实现的。


http://www.kler.cn/a/500907.html

相关文章:

  • 用vscode写latex-1
  • 如何看待Akamai 退出中国市场进行转型?
  • 前端开发:HTML常见标签
  • shell基础使用及vim的常用快捷键
  • Cisco认证是Cisco公司建立的网络技术证书体系
  • C#解决浮点数精度丢失的问题(参考方案)
  • [DO374] Ansible 配置文件
  • 云服务器加了安全组端口还是无法访问
  • 一分钟学会文心一言API如何接入,文心一言API接入教程
  • 基于 JavaEE 的影视创作论坛
  • fitz获取pdf内容
  • 浅谈云计算04 | 云基础设施机制
  • 游戏引擎学习第78天
  • SmartScanner:智能化网络漏洞扫描的未来先锋
  • RAID储存技术
  • [创业之路-242]:《华为双向指挥系统》-1-组织再造-纠正企业管理的长短腿-科层制优缺点以及科层制企业的特点
  • uniapp Android 原生插件开发-Module扩展为例-从开发到测试到部署到uniapp项目
  • 算法练习01
  • AF3 Transition和ConditionedTransitionBlock类解读
  • C# 与 Windows API 交互的“秘密武器”:结构体和联合体
  • 【Vue + Antv X6】可拖拽流程图组件
  • NGINX--HTTPTCP负载均衡
  • 无需昂贵GPU:本地部署开源AI项目LocalAI你在消费级硬件上运行大模型
  • 基于python Numpy的24位音频数据读取实例解析