Python 官方文档:入门教程 => 点击学习
目录1、官网的解释2、案例讲解2.1、settings.xml和pom都配置激活了各自的profile2.2、settings.xml没有配置激活的profile,pom中配置了激活
上一篇我们详解了setttings.xml的配置项,里面的配置项基本都和仓库有关系,我们使用Maven更多的也是要从仓库下载jar包,然后也把我们自己公共的jar包上传到仓库。由于我们是可以配置多个仓库的,这时候就涉及到了一个问题:下载一个jar包时,怎么确定这些仓库的使用顺序?
maven官网对这个问题给了一定的解答,如下:
Remote repository URLs are queried in the following order for artifacts until one returns a valid result:
1. effective settings:
1. Global
settings.xml
2. User
settings.xml
2. local effective build POM:
1. Local
pom.xml
2. Parent POMs, recursively
3. Super POM
3. effective POMs from dependency path to the artifact.
For each of these locations, the repositories within the profiles are queried first in the order outlined at Introduction to build profiles.
Before downloading from a repository, mirrors configuration is applied.
All profile elements in a POM from active profiles overwrite the global elements with the same name of the POM or extend those in case of collections. In case multiple profiles are active in the same POM or external file, the ones which are defined later take precedence over the ones defined earlier (independent of their profile id and activation order).
If a profile is active from
settings
, its values will override any equivalently ID'd profiles in a POM orprofiles.xml
file.
Take note that profiles in the
settings.xml
takes higher priority than profiles in the POM.
简单翻译一下,就是:
也就是整体的优先级方面:
conf/settings.xml > ${user.home}/.m2/settings.xml >本地的pom.xml文件
考虑到我们常用的配置文件是conf/settings.xml和工程里面的pom.xml文件,我们针对这两个文件的结合来分析仓库的使用顺序。
假如我们有如下的全局配置文件:settings.xml
<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 http://maven.apache.org/xsd/settings-1.2.0.xsd">
<localRepository>D:/programs/.m2/repository</localRepository>
<servers>
<server>
<id>dev</id>
<username>repouser</username>
<passWord>repopwd</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>dev-mirror</id>
<mirrorOf>dev1</mirrorOf>
<name>第二套开发仓库</name>
<url>http://192.168.1.2/repository/devM</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>env-dev</id>
<repositories>
<repository>
<id>dev5</id>
<name>Repository for jdk 1.4 builds</name>
<url>http://192.168.1.1/repository/dev5</url>
</repository>
</repositories>
</profile>
<profile>
<id>env-test</id>
<repositories>
<repository>
<id>test</id>
<name>test</name>
<url>http://192.168.1.1/repository/test</url>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>env-dev</activeProfile>
</activeProfiles>
</settings>
工程的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>test</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<revision>1.0.0</revision>
</properties>
<repositories>
<repository>
<id>dev4</id>
<name>dev4</name>
<url>http://192.168.1.1/repository/dev4</url>
</repository>
</repositories>
<profiles>
<profile>
<id>profile-1</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>dev1</id>
<name>dev1</name>
<url>http://192.168.1.1/repository/dev1</url>
</repository>
<repository>
<id>dev2</id>
<name>dev2</name> <url>http://192.168.1.1/repository/dev2</url>
</repository>
</repositories>
</profile>
<profile>
<id>profile-2</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>dev3</id>
<name>dev3</name>
<url>http://192.168.1.1/repository/dev3</url>
</repository>
</repositories>
</profile>
</profiles>
</project>
pom.xml文件默认激活了profile-1和profile-2,settings中默认激活了env-dev。按照在同一文件的profile的生效顺序规则,pom文件中的仓库使用顺序为
dev5->dev3->dev1->dev2->dev4->central(超级pom中定义的中央仓库),
而由于在setttings.xml中为dev1和central配置了镜像仓库,所以最终仓库的优先查询顺序为:
dev5->dev3->dev-mirror->dev2->dev4->nexus-aliyun
这种情况下,settings中没有设置activeProfiles,我们只需要考虑pom文件中仓库的查询顺序,按照先前说的规则:
则仓库使用顺序为
dev3->dev1->dev2->dev4->central(超级pom中定义的中央仓库),
而由于在setttings.xml中为dev1和central配置了镜像仓库,所以最终仓库的优先查询顺序为:
dev3->dev-mirror->dev2->dev4->nexus-aliyun
maven官方不建议在settings中配置profile,因为profile中配置的一些属性或者仓库基本都是为项目服务的,我们的项目可以通过代码仓库(比如gitlab)进行共享,但是settings配置文件一般很难共享。如果我们的项目依赖了自己本地的settings文件中的一些配置信息,但是其他同事本地的settings文件又没这些信息,那么其他同事就无法正常的运行项目。而且profile中定义的信息一般都和项目运行的环境有关,比如有开发环境的配置,测试环境的配置,还有生产环境的配置。既然和项目有直接的紧密关系,就应该将其配置到项目里面。
seetings文件建议用来配置下列几项
到此这篇关于maven多个仓库查询的优先级顺序的文章就介绍到这了,更多相关maven多个仓库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: maven多个仓库查询的优先级顺序案例讲解
本文链接: https://lsjlt.com/news/210953.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0