Maven进阶系列-仓库和镜像

news2025/4/17 17:16:18

Maven进阶系列-仓库和镜像

文章目录

  • Maven进阶系列-仓库和镜像
    • 1. 仓库
      • 1.1 仓库类型
      • 1.2 寻找jar的基本优先级顺序:
      • 1.3 仓库优先次序验证示例
    • 2. settings.xml文件
      • 2.1 mirrors
        • 2.1.1 没有配置mirror
        • 2.1.2 配置了mirror
        • 2.1.3 <mirrorOf>
      • 2.2 servers
      • 2.3 profiles

1. 仓库

1.1 仓库类型

本地仓库、远程中央仓库、公司自己搭建的私有仓库

1.2 寻找jar的基本优先级顺序:

本地仓库 > settings.xml的profile的仓库 > pom.xml的profile的仓库 >pom.xml的仓库 > 中央仓库

maven 寻找得顺序大致可以理解为:
1. 在本地仓库中寻找,如果没有则进入下一步。
2. 在全局应用的私服仓库中寻找,如果没有则进入下一步。
3. 在项目自身的私服仓库中寻找,如果没有则进入下一步。
4. 在中央仓库中寻找,如果没有则终止寻找。

补充:
1. 如果在找寻的过程中,如果发现该仓库有镜像设置,则用镜像的地址代替。
2. 如果仓库的 id 设置成 “central”,则该配置会覆盖 maven 默认的中央仓库配置。

设置仓库的方式有两种,一种是在项目最顶级POM.xml中设置,另一种是在settings.xml中设置。

1.3 仓库优先次序验证示例

在pom.xml中设置

 <repositories>
        <repository>
            <id>pom-repository-first</id>
            <name>pom-repository-first</name>
            <url>http://192.168.100.100:8181/nexus/content/groups/public</url>
        </repository>
        <repository>
            <id>pom-repository-second</id>
            <name>pom-repository-second</name>
            <url>http://192.168.100.100:8182/nexus/content/repositories/thirdparty/</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>Team Nexus Repository</name>
            <url>http://192.168.100.100:8181/nexus/content/groups/public</url>
        </pluginRepository>
    </pluginRepositories>


    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <profiles>
        <profile>
            <id>pom-profile-first</id>
            <repositories>
                <repository>
                    <id>pom-repository-first</id>
                    <name>pom-repository-first</name>
                    <url>http://192.168.100.100:8084/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <!--配置默认的,配置文件,右侧的maven中,profiles默认选中dev-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

settings.xml中设定:

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <localRepository>D:\Program Files\apache-maven-3.6.1\repository</localRepository>

    <mirrors>
        <!--  设置多个mirrors镜像,镜像只会执行第一个位置mirror。-->
        <!--  配置的多个mirror可以都放着不影响,选取一个镜像下载比较快的放在第一个就行。比如你设置使用自己公司的私有仓库-->
        <!--只有当前一个mirror无法连接的时候,才会去找后一个,类似于备份和容灾。所以当第一个mirror中不存在a.jar的时候,并不会去第二个mirror中查找,甚至于,maven根本不会去其他的mirror地址查询-->
        <mirror>
            <!--当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询-->
            <id>aliyun</id>
            <name>阿里云仓库地址</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            <!--覆盖了Maven自带的central-->
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>


    <profiles>
        <!-- 全局JDK1.8配置 -->
        <profile>
            <id>jdk1.8</id>
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <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>
        <!-- 阿里云配置: 提高国内的jar包下载速度 -->
        <profile>
            <id>settings-profile-aliyun</id>
            <repositories>
                <repository>
                    <id>settings-repository-aliyun</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
        <profile>
            <id>settings-profile-first</id>
            <repositories>
                <repository>
                    <id>settings-repository-first</id>
                    <name>settings-repository-first</name>
                    <url>http://192.168.100.100:8183/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
        <profile>
            <id>settings-profile-second</id>
            <repositories>
                <repository>
                    <id>settings-repository-second</id>
                    <name>settings-repository-second</name>
                    <url>http://192.168.100.100:8084/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <!--激活仓库配置,拉取依赖会在这些仓库中逐个去找-->
    <activeProfiles>
        <activeProfile>jdk1.8</activeProfile>
        <activeProfile>settings-profile-aliyun</activeProfile>
        <activeProfile>settings-profile-first</activeProfile>
        <activeProfile>settings-profile-second</activeProfile>
    </activeProfiles>

</settings>

2. settings.xml文件

settings 主要由mirrors、servers 和profiles 三部分组成。

2.1 mirrors

mirror相当于一个拦截器,它会拦截 maven 对 remote repository 的相关请求,把请求里的 remote repository 地址,重定向到 mirror 里配置的地址。

2.1.1 没有配置mirror

2.1.2 配置了mirror

上述图中B仓库被称为A仓库的镜像。

2.1.3

<mirrorOf></mirrorOf> 标签里面放置的是要被镜像的 Repository ID。为了满足一些复杂的需求,Maven 还支持更高级的镜像配置:

  • <mirrorOf>*</mirrorOf> :匹配所有远程仓库
  • <mirrorOf>repo1,repo2</mirrorOf>:匹配仓库 repo1 和 repo2,使用逗号分隔多个远程仓库。
  • <mirrorOf>*,!repo1</miiroOf>: 匹配所有远程仓库,repo1 除外,使用感叹号将仓库从匹配中排除。

2.2 servers

在Maven的配置文件(settings.xml)中,标签用于配置 Maven 与远程仓库的认证信息,以便于 Maven 在构建或发布时进行认证。

例如,我们要发布 Maven 项目到 Nexus 私服,可以在 标签中配置私服的地址和认证凭证(用户名、密码等)。这样,当 Maven 在构建或发布时访问私服仓库时,会自动使用这里配置的凭证进行认证。以下是一个 标签的示例配置:

<servers>
  <server>
    <id>nexus-releases</id>
    <username>myusername</username>
    <password>mypassword</password>
  </server>
</servers>

其中, 标签指定了私服的 ID,这个 ID 通常是 Nexus 中仓库的名称,例如 “nexus-releases”。 和 分别是私服的访问用户名和密码,用于 Maven 认证访问私服。

这样配置后,在 Maven 执行构建或发布时,就会自动使用这里配置的凭证去访问私服,确保 Maven 在发布时具有足够的权力和权限进行发布操作。

2.3 profiles

在 Maven 的配置文件(settings.xml 或 pom.xml)中, 标签用于配置不同环境下的不同构建选项。例如,有些项目会在开发环境下使用 H2 数据库,而在生产环境下使用 MySQL 数据库,这时就可以使用 标签定义两个不同环境。

每个 标签可以包含独立的一组配置,例如 、、、 等,这些配置将仅在该 激活时生效。可以使用 标签来定义激活该 的条件,例如指定操作系统、Maven 版本、当前构建环境等等。

以下是一个 标签的示例配置:

<profiles>
  <profile>
    <id>dev</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <database.driver>org.h2.Driver</database.driver>
      <database.url>jdbc:h2:mem:testdb</database.url>
    </properties>
  </profile>
  <profile>
    <id>prod</id>
    <properties>
      <database.driver>com.mysql.jdbc.Driver</database.driver>
      <database.url>jdbc:mysql://localhost/mydb</database.url>
    </properties>
  </profile>
</profiles>

在上述示例中,定义了两个 ,一个 ID 为“dev”,另一个为“prod”。 中设置了 “dev” 是默认激活的配置。在 中配置了不同环境下的数据库驱动和数据库连接 URL。在 Maven 的命令执行中,可以选择使用不同的 Profile 从而达到构建不同的环境的目的。例如:

# 构建 dev 环境
mvn -Pdev clean package

# 构建 prod 环境
mvn -Pprod clean package

通过 标签的使用,可以方便地管理多环境下的不同构建配置,提高了项目的灵活性和可维护性,同时也可以更好地符合软件开发的标准流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效分割分段视频:提升您的视频剪辑能力

在数字媒体时代&#xff0c;视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容&#xff0c;掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频&#xff0c;以提升您的视频剪辑能力。以下是详细的操作步…

每日一题 275. H 指数 II(中等,二分)

最大最小值问题&#xff0c;应该是对总共的论文数作二分答案&#xff0c;但是昨天周赛写了对最高引用次数作二分的代码&#xff0c;懒得再写了。。 class Solution:def hIndex(self, citations: List[int]) -> int:if len(citations) 0:return 0l, r 0, citations[-1]ans…

【前端框架】本文带你了解nvue

前言 各位公主给&#x1f478;&#x1f3fb;&#xff0c;王子&#x1f934;&#x1f3fb;好&#xff0c;我是你们的Aic山鱼&#xff0c;专注于前端领域的垂直更新。我热衷于分享我的经验和知识&#xff0c;希望能够帮助更多的人在前端领域取得进步。作为一名前端开发人员&#…

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动(附项目源码)

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来&#xff0c;站在城外的人想冲进去&#xff0c;婚姻也罢&#xff0c;事业也罢&#xff0c;人生的欲望大都如此…

数字孪生协同仿真:复杂电机篇

​01.简介 电机仿真是现代机电工程研究领域中的重要环节&#xff0c;始于20世纪后半叶&#xff0c;为工程师提供了一种研究、设计和优化各种电机系统的新方式。时至今日&#xff0c;从传统的电动机到现代的电动汽车动力系统&#xff0c;电机仿真技术在电机设计、性能分析和控制…

JVS低代码表单中下拉框是如何配置的?

什么是表单下拉框 表单下拉框是一种用户界面元素&#xff0c;通常用于表单中&#xff0c;允许用户从一组预定义的选项中选择一个选项。表单下拉框由一个下拉箭头和一个选项列表组成&#xff0c;用户可以通过点击下拉箭头来展开选项列表&#xff0c;然后选择其中的一个选项。表…

Ansys Speos|Optimization小工具快速优化设计

概述 优化是一个有助于找到一个光学系统的最佳解决方案的实验过程&#xff0c;它主要是利用参数的变化而试图达到预期的结果。在Speos 2023 R2中提供三种可供选择的方法来执行此类分析。第一个是基于workbench创建的优化&#xff0c;可以参考文章&#xff08;基于Ansys Workben…

数据结构题型21-第八章 排序

文章目录 0 本章的知识点总结1 本章知识框架2 排序的基本概念3 插入排序3.1 直接插入排序 0 本章的知识点总结 1 本章知识框架 2 排序的基本概念 小试牛刀 3 插入排序 参考网站&#xff1a;排序直观网站 3.1 直接插入排序 自己分析A[0] A[1] A[2] A[3] A[4] A[5] A…

RTMP直播在虚拟数字人场景使用

虚拟数字人&#xff08;Virtual Digital Human&#xff09;&#xff0c;指的是一种基于数字技术创建的虚拟人物&#xff0c;他们有自己的外貌、声音&#xff0c;甚至是性格。虚拟数字人通常是通过计算机图形学、人工智能和其他先进技术来实现的。人们可以与这些虚拟数字人进行交…

笔记本电脑的键盘鼠标如何共享控制另外一台电脑

环境&#xff1a; 联想E14 x2 Win10 across 2.0 问题描述&#xff1a; 笔记本电脑的键盘鼠标如何共享控制另外一台电脑 解决方案&#xff1a; 1.下载across软件&#xff0c;2台电脑都按装&#xff0c;一台设为服务端&#xff0c;一台客户端 2.把配对好设备拖到右边左侧…

金属压铸件自动化3D全尺寸测量设备自动外观检测三维检测-CASAIM

铸造作为现代装备制造工业的基础共性技术之一&#xff0c;铸件产品既是工业制造产品&#xff0c;也是大型机械的重要组成部分&#xff0c;被广泛运用在航空航天、工业船舶、机械电子和交通运输等行业。 铸件形状复杂&#xff0c;一般的三坐标或者卡尺圆规等工具难以获取多特征…

10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节

课上 一些结论&#xff0c;性质 n0,n1,n2指的是子结点的数量&#xff0c;n0没有子节点&#xff0c;叶子结点 n2*n2n11,若n1为奇数&#xff0c;则n为偶数&#xff0c;不然&#xff0c;则为奇数 满二叉树 没有度为1的结点&#xff0c;即每个结点要么没有孩子结点&#xff0c;要么…

2023 年 43 周

2023 年 43 周 普普通通的一周过去了&#xff0c;唯一需要感叹的&#xff0c;大概就是本年度余额只剩下 19%了&#xff1a; 学习进度 其实这周真的没什么特别大的进展&#xff0c;有种 here & there 的感觉&#xff0c;目前来说唯一能做的就是以锻炼为 anchor point 去寻找…

【Linux】NTP服务器配置、时间修改

查看当前系统时间date修改当前系统时间date -s "2018-2-22 19:10:30"查看硬件时间hwclock --show修改硬件时间hwclock --set --date "2018-2-22 19:10:30"同步系统时间和硬件时间hwclock --hctosys保存时钟clock –w1.设置NTP Server服务检查系统是否安装n…

动手学深度学习——第六次

python类和对象 python类和对象参数管理参数访问 卷积 python类和对象 参数管理 生成一个二维张量&#xff0c;然后传入有但隐藏层的多层感知机 参数访问 net[0] nn.Linear(4,8) net[1] nn.ReLU() net[2] nn.Linear(8,1) net[2].state_dict()访问最后一层的参数即权重和偏置 …

科大讯飞勾勒生成式AI输入法“模样”,开启下一代输入法革命

回顾国内第三方输入法赛道近十余年的发展&#xff0c;移动互联网的市场红利催生了科大讯飞、百度、搜狗等颇具规模和实力的头部厂商。与此同时&#xff0c;历经多年、多方角逐&#xff0c;第三方输入法市场进入存量阶段&#xff0c;升级技术、优化用户体验来挖掘存量&#xff0…

MatrixOne Meetup回顾 | 上海站

9月24日&#xff0c;MatrixOne 社区在上海成功举办了里程碑式的第一次 Meetup。活动吸引了数十位外部小伙伴一同交流探讨数据库行业内发展趋势、技术、以及应用的方方面面。通过分享、交流、互动&#xff0c;加深了参与者对MatrixOne的了解。未来&#xff0c;我们将继续在多个城…

半导体产线应用Power Link 转EtherCAT协议网关数字化转型

随着数字化转型的推进&#xff0c;越来越多的企业开始意识到数字化转型的重要性&#xff0c;并将其作为发展战略的关键之一。半导体产线作为一个高度自动化的生产系统&#xff0c;自然也需要数字化转型来提高效率、降低成本和提高质量。Power Link 转EtherCAT协议网关是半导体产…

高斯过程 Gaussian Process

What does GP do? GP是一种回归方法&#xff0c;但也能够用来分类和聚类均值表示数据最有可能出现的位置 多变量高斯分布 X ∼ N ( μ , Σ ) X\sim N(\mu,\Sigma) X∼N(μ,Σ): 包含的信息有每个变量的均值和协方差矩阵均值决定分布中心协方差矩阵确定形状 Marginalizatio…

Selenium自动化测试:如何搭建自动化测试环境?

最近也有很多人私下问我&#xff0c;selenium学习难吗&#xff0c;基础入门的学习内容很多是3以前的版本资料&#xff0c;对于有基础的人来说&#xff0c;3到4的差别虽然有&#xff0c;但是不足以影响自己&#xff0c;但是对于没有学过的人来说&#xff0c;通过资料再到自己写的…