maven仓库的优先级,profile的优先级

在maven中主要有以下几种仓库的设置

  1. 本地仓库
  2. settings里面profile中设置的仓库
  3. mirror仓库
  4. pom文件中的repository

结论: 本地仓库 >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>

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

<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

maven profile也是有优先级别

  1. 在settings.xml中的profile优先级高于pom中的
  2. 同在settings.xml的properties,如果都激活了,根据profile定义的先后顺序来进行覆盖取值,后面定义的会覆盖前面,其properties为同名properties中最终有效。并不是根据activeProfile定义的顺序 。
  3. 如果有user setting和globel settings,则两者合并,其中重复的配置,以user settings为准。

相关链接

Maven详解之仓库——本地仓库、远程仓库 Maven遇到的问题列表 Maven简介(三)——profile介绍 使用maven profile实现多环境可移植构建