首页 > 其他分享 >maven访问仓库的顺序

maven访问仓库的顺序

时间:2023-12-08 15:33:22浏览次数:27  
标签:xml 顺序 repository settings 仓库 配置 maven

repository仓库配置文件有3个地方:

1、默认中央仓库:Maven安装目录下 lib/maven-model-builder-${version}.jar 中 \org\apache\maven\model\pom-4.0.0.xml 文件配置着默认中央仓库,它是所有Maven POM的父POM,所有Maven项目继承该配。

<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

2、settings.xml:在Maven安装目录下 conf/settings.xml。

3、pom.xml:在项目中的pom.xml文件。

<!-- 阿里仓库 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 是否开启发布版构件下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启快照版构件下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

仓库可以简单地认为只有2种:本地仓库、远程仓库(私库),中央仓库(可以看作一种默认的远程仓库)。

不管是仓库<repository>还是镜像<mirror>最重要的就是<id>和<url>属性。

<id>aliyunmaven</id>
<url>https://maven.aliyun.com/repository/public</url>

mirror和epository关系
mirror相当于 repository 的拦截器,把请求 repository 地址重定向到mirror里配置的地址,所以配置 mirror 时 mirrorOf 值很重要不能随便写,
mirrorOf 要和 repository 的 id 值保持一致,如果 mirrorOf 配置的是 * 或 central 时,repository 可以不用配置,因为pom-4.0.0.xml文件中配置了一个默认中央仓库,而 * 则代表拦截所有repository ,所以也不用配置,mirrorOf 除了 * 或 central 外的其他值都必须配置 repository 的 id。

比如<mirrorOf>central</mirrorOf>就会拦截中央仓库,

<mirrors>
<!-- 给定仓库的下载镜像。 -->
<mirror>
<!-- 该镜像的唯一标识符。id用来区分不同的mirror元素。 -->
<id>planetmirror.com</id>
<!-- 镜像名称 -->
<name>PlanetMirror Australia</name>
<!-- 该镜像的URL。构建系统会优先考虑使用该URL,而非使用默认的服务器URL。 -->
<url>http://downloads.planetmirror.com/pub/maven2</url>
<!-- 镜像的服务器的id。例如,如果我们要设置了一个Maven中央仓库的镜像,就需要将该元素设置成central。
这必须和中央仓库的id central完全一致。 -->
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

比如<mirrorOf>*</mirrorOf>就会拦截所有远程仓库(私库)和中央仓库。 

<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

仓库主要分为本地仓库、远程仓库(私库)、中央仓库(可以看作一种默认的远程仓库)。

profile是用来方便切换环境,本质上就是一种普通的远程仓库(私库),只不过有先后顺序,相同仓库id会覆盖前面的仓库,而镜像会拦截<mirrorOf>对应仓库id,

mirror和epository优先级
拉取jar包时的优先级别:pom.xml中repository > settings.xml中mirror > settings.xml中repository > 默认中央仓库,存在多个mirror配置的时候mirrorOf 等于 * 放到最后,同级别的 repository 根据 配置的先后顺序倒序

 

settings.xml 文件一般存在于两个位置:

全局配置(global settings): ${maven.home}/conf/settings.xml
用户配置(user settings): ${user.home}/.m2/settings.xml,idea中配置的User settings file位置,会合并${maven.home}/conf/settings.xml中内容。
注意:用户配置优先于全局配置。${user.home}

配置优先级:局部配置优先于全局配置。

配置优先级从高到低:pom.xml > user settings > global settings

如果这些文件同时存在,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。

所以注意:

由于我们常常会在IDEA中手动选择一个settings.xml文件(用户配置),会和全局配置 ${maven.home}/conf/settings.xml中内容合并,

所以千万不要在${maven.home}/conf/settings.xml中如下配置<mirrorOf>*</mirrorOf>会拦截所有远程仓库(私库),导致私库中的jar包不能正常拉取。

<!-- 不要这样配置 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

正确如下配置只拦截中央仓库<mirrorOf>central</mirrorOf>

<!-- 推荐 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>

settings.xml配置主要如下参数:

LocalRepository:配置本地仓库位置路径。idea中Local repository会覆盖这个路径。
Servers:主要是配置私库的用户名和密码。
Mirrors:镜像仓库。
Profiles:根据环境参数来调整构建配置的列表。比如方便切换生产环境和测试环境。
ActiveProfiles:手动激活profiles的列表

pom.xml远程仓库(私库)

<!-- 阿里仓库 -->
<repositories>
<repository>
<id>aliyunmaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- 是否开启发布版构件下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否开启快照版构件下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

settings.xml参考如下

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">

<!--本地仓库路径-->
<localRepository>D:/Works/repository</localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>

<servers>
<server>
<!--该id与distributionManagement中repository元素的id相匹配。 -->
<!--或者profiles.profile.repositories.repository.id相匹配。-->
<id>env-dev</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>

<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>


<profiles>
<!--测试环境-->
<profile>
<id>env-test</id>
<repositories>
<repository>
<id>nexus-test</id>
<url>http://192.168.111.201:7000/nexus/content/groups/public</url>
</repository>
</repositories>
</profile>
<!--开发环境-->
<profile>
<id>env-dev</id>
<repositories>
<repository>
<id>nexus-dev</id>
<url>http://192.168.111.202:7000/nexus/content/groups/public/</url>
</repository>
</repositories>
</profile>
</profiles>


<activeProfiles>
<!--激活测试环境-->
<activeProfile>env-test</activeProfile>
<!--激活开发环境-->
<activeProfile>env-dev</activeProfile>
</activeProfiles>
</settings>

pom.xml参考如下

<distributionManagement>
<repository>
<id>env-dev</id>
<name>Nexuss Releses Repository</name>
<url>
http://192.168.111.203:7000/nexus/content/repositories/releases/
</url>
</repository>
</distributionManagement>

distributionManagement中的repository
表示的是项目打包成库文件后要上传到什么库地址

标签:xml,顺序,repository,settings,仓库,配置,maven
From: https://www.cnblogs.com/andy1234/p/17888262.html

相关文章

  • Java开发者必备:Maven简介及使用方法详解!
    今天我们来介绍一个在Java开发中非常重要的工具——Maven。如果你是一名Java开发者,那么你一定不会对Maven感到陌生。但是,对于一些新手来说,可能还不太了解Maven是什么,它有什么作用,以及如何使用它。接下来,就让我们一起来深入了解一下Maven吧!一、maven简介Maven是什么Maven是一个......
  • Maven 环境变量配置 'mvn' 不是内部或外部命令,也不是可运行的程序或批处理文件
    在cmd里面输入对应的mvn命令出现了这行提示,说明你的maven环境变量配置有问题,需要重新配置1、添加M2_HOME和MAVEN_HOME在系统变量里面添加M2_HOME和MAVEN_HOME,都指向你的本地maven安装路径 2、添加用户变量PATH中3、校验在cmd中输入mvn-version出现你对应的maven......
  • Maven无法下载fastdfs-client-java依赖问题解决
    一、分析原因控制台报错具体如下:并且pom.xml中以下依赖爆红:<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.29-SNAPSHOT</version></dependency>原因:因为fastdfs-clien......
  • Day21 顺序结构及选择结构中的If结构
    顺序结构Java的基本结构就是顺序结构,从上到下的顺序执行,是任何一种算法都离不开的基本算法结构packagecom.baixiaofan.struct;publicclassShunXuDemo{publicstaticvoidmain(String[]args){System.out.println("hello1");//按顺序一句一句执行......
  • @SpringBootTest 和 @RunWith 注解不能识别 单元测试第一步引入maven依赖
    @SpringBootTest和@RunWith注解不能识别单元测试第一步引入maven依赖一、背景    最近在预研 Rocketmq,在写小例子的时候,需要编写测试代码,突然间发现我的 @SpringBootTest 和 @RunWith 这两个注解不能识别,于是展开了我的问题排查过程。问题截图如下:二、问题排......
  • 【换源】git命令行迁移仓库
    直接gitclone的话,查看本地分支,会只有默认主分支,可能是master,也可以能是设置的。查看所有分支gitbranch-a*masterremotes/origin/HEAD->origin/masterremotes/origin/branch1remotes/origin/branch2只有一个分支在本地gitpull只会把主分支推送上去。(本地有的)可......
  • Maven多模块项目版本统一管理
    如图所示,项目中定义了这样几个模块:pdd-workflow-build:定义项目版本,及全局配置pdd-workflow-dependencies:外部依赖管理,统一管理所有用到的外部依赖的版本pdd-workflow-service:项目service模块pdd-workflow-web:项目web模块pdd-parent:聚合模块模块之间的继承依赖关系如......
  • SpringBoot项目中集成自定义公共Maven依赖如何集成与调试
    场景Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101391279Maven项目在pom文件中引入lib下的第三方jar包并打包进去:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det......
  • git~为github三方仓库添加贡献的正确方式
    为github三方仓库添加贡献如果希望成为某些开源框架的贡献者,例如如希望加入higress、keycloak、ruoyi这些框架的开发者行列,那么今天的文章应该可以帮到您。克隆和拉取项目FORKHigress到您的存储库。要完成这项工作,您只需单击alibaba/higress主页右侧的Fork按钮。然后你......
  • 使用 maven 自动将源码打包并发布
    maven-source-plugin作用:在构建过程中将项目的源代码进行打包,并作为一个jar文件附着在主构件上,在pom.xml中添加如下内容,使用maven生成jar的同时生成sources包在pom中配置如下:<build><plugins><plugin><groupId>org.apache.maven.plugins</g......