`

深入比较几种maven仓库的优先级

 
阅读更多

深入比较几种maven仓库的优先级

在maven中主要有以下几种仓库的设置,本地仓库,settings里面profile中设置的仓库,mirror仓库,pom文件中的repository。下面将和大家一起探讨和比较下这几种仓库的优先级别。

这里我们有三个仓库 :

远程222.197.xxx仓库

localhost镜像,是我自己在本机搭建的一个仓库

nexus仓库,是nexus官方的仓库

首先考虑这样一种情况:maven本地仓库中拥有该包,而中央仓库、mirror仓库、profile仓库、pom中仓库均不含该包。我们可以看到maven直接首先从本地仓库中找到该包,编译成功。

 

由此可以看出,本地仓库拥有最高的优先级。

接下来,我们继续剩下的仓库的优先级,(下面所有情况,都默认本地不拥有我们需要的包)剩下的仓库都是远程仓库,这里我们设定mirror设置的镜像仓库是中央仓库的镜像。那么就可以把mirror当成中央仓库,因为其已经被mirror替换了。

这次的场景为:pom文件中定义的仓库(repository)(即远程:222.197.xxx)拥有该包,而mirror(localhost镜像)和profile(nexus仓库)中的仓库不拥有该包。进行测试:

 

从这个结果可以看出,maven首先调用了profile中的仓库,其次找到了pom文件中设置的仓库。而mirror没有出现。我们这里可以初步推测优先级别为:profile > pom > mirror,为了验证我们的判断,我们需要在进行一次测试来验证这个结果。

场景如下:mirror中拥有该包(222.197),而pom(localhost镜像)和profile(nexus仓库)中均不含有该包。进行测试:

 

实际情况的确验证了我们的猜想。那么我们得出这几种maven仓库的优先级别为:

本地仓库 >profile > pom中的repository > mirror

注意:我也验证过这样的情况,将mirror这样设置:

<mirror>

<id>huacloud-central</id>

<mirrorOf>*</mirrorOf>

<name>name-of-this</name>

<url>http://222.197.XXXXXX/nexus/content/groups/public/</url>

 </mirror>

即是表示该仓库地址为所有仓库的镜像,那么这个时候,maven会忽略掉其他设置的各种类型仓库仓库,只在mirror里面找。所以建议不要这样设置,他将导致pom文件中、pforile里面的仓库设置都失效。

随便科普一下几种仓库的设置吧:

pom中的repository:

<repositories>

<repository>

<id>dsdf</id>

<releases>

<enabled>true</enabled>

</releases>

<url>http://222.197.XXXXXX/nexus/content/groups/public/</url>

</repository>

 </repositories>

profile中的仓库是在maven的设置文件(maven安装目录/conf/settings.xml)

<profile>

 <id>nexus</id>

 <repositories>

 <repository>

 <id>sonatype-forge</id>

 <url>http://repository.sonatype.org/content/groups/forge/</url>

 <releases>

 <enabled>true</enabled>

 </releases>

 <snapshots>

 <enabled>true</enabled>

 </snapshots>

 </repository>

 </repositories>

 <pluginRepositories>

 <pluginRepository>

 <id>sonatype-forge</id>

 <url>http://repository.sonatype.org/content/groups/forge/</url>

 <releases>

 <enabled>true</enabled>

 </releases>

 <snapshots>

 <enabled>true</enabled>

 </snapshots>

 </pluginRepository>

 </pluginRepositories>

 </profile>

 </profiles>

 

<!-- 使用下面代码来激活profile-->

 

<activeProfiles>

<activeProfile>nexus</activeProfile>

 </activeProfiles>

分享到:
评论
1 楼 xkxq 2016-03-06  
pom中应该大于profile中的吧

相关推荐

    activemq-src

    - **消息优先级**:允许设置消息优先级,优先处理重要消息。 - **消息分页**:当内存不足以存储所有消息时,可以将部分消息存储到磁盘。 - **安全管理**:支持基于角色的访问控制,保护消息安全。 - **集群**:可以...

    issue-tracker-api:这是用于Issue Tracker的Restful API

    本篇文章将深入探讨“issue-tracker-api”这个项目,它是用Java语言实现的一个RESTful API,专门用于问题跟踪。 一、什么是RESTful API? REST(Representational State Transfer)是一种网络应用程序的设计风格和...

    cs172WebCrawler

    5. **深度优先与广度优先遍历**:两种常见的网页遍历策略,前者从起始点深入探索,后者先抓取相邻页面。根据需求和资源限制选择合适的策略。 6. **数据存储**:抓取到的数据需存储,可能涉及文件系统、数据库(如...

    toDoApp

    在这样的结构中,我们可能会找到如`src/main/java`(源代码)、`src/main/resources`(资源文件)、`pom.xml`(Maven构建文件)或`build.gradle`(Gradle构建文件),以及可能的测试代码和文档。 总的来说,...

    BABEDOSA:软件工程敏捷方法项目

    Scrum 是一种广泛应用的敏捷框架,它包括了几个关键角色:产品负责人、Scrum Master 和开发团队。产品负责人负责管理产品待办事项列表(Product Backlog),确保团队明确优先级。Scrum Master则作为团队的教练,确保...

    SClub:DIT 敏捷小组项目

    由于我们只有一个名为"SClub-master"的文件夹名,我们可以假设这是项目的主仓库,可能包含了源代码、文档、配置文件等。典型的Java项目结构可能包括以下几个部分: 1. **src/main/java**:存放源代码文件,按照包...

Global site tag (gtag.js) - Google Analytics