settings.xml中maven存储库的顺序

时间:2016-10-23 10:16:03

标签: maven

我有一个settings.xml,如下所示: -

<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">
   <servers>
      <server>
         <id>nReleases</id>
         <username>test</username>
         <password>test123</password>
      </server>
      <server>
         <id>nSnapshots</id>
         <username>test</username>
         <password>test123</password>
      </server>
   </servers>

<profiles>
    <profile>
        <id>space</id>
        <repositories>
           <repository>
                <id>central</id>
                <url>http://repo1.maven.org/maven2</url>
            </repository>
            <repository>
                <id>nReleases</id>
                <name>Releases</name>
                <url>http://someserver/repository/maven-releases/</url>
            </repository>
           <repository>
                <id>nSnapshots</id>
                <name>Snapshots</name>
                <url>http://someserver/repository/maven-snapshots/</url>
            </repository>
        </repositories>
    </profile>
</profiles>

<activeProfiles>
    <activeProfile>space</activeProfile>
</activeProfiles>
</settings>

我希望maven先检查repo1.maven.org然后再查看someserver。有人能让我知道如何实现这一目标吗?

我正在使用Maven 3.3.9。

我已经完成了这个question并尝试更改在配置文件中声明repos的顺序,但它没有帮助。

<profile>
    <id>space</id>
    <repositories>   
        <repository>
            <id>nReleases</id>
            <name>Releases</name>
            <url>http://someserver/repository/maven-releases/</url>
        </repository>
        <repository>
            <id>nSnapshots</id>
            <name>Snapshots</name>
            <url>http://someserver/repository/maven-snapshots/</url>
        </repository>
        <repository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2</url>
        </repository>
    </repositories>
</profile>

执行mvn clean install

时记录
tuk-MacBook-Pro-4:camel tuk$ mvn clean install
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building camel 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://someserver/repository/maven-releases/org/apache/camel/camel-redis/2.16.3/camel-redis-2.16.3.pom
Downloading: http://someserver/repository/maven-snapshots/org/apache/camel/camel-redis/2.16.3/camel-redis-2.16.3.pom

1 个答案:

答案 0 :(得分:2)

在Maven 2中没有明确指定设置中存储库的顺序,但是从Maven 3(以及MNG-4400的修复)开始,存储库总是在设置中按其声明顺序进行尝试。

可能发生的事情,以及可能导致问题的原因是Maven尝试存储库,无法执行此操作,并在本地存储库中存储它尝试失败的事实。这会导致在本地存储库中创建.lastUpdated文件,并存储此信息。结果是Maven不会重新尝试从知道下载失败的存储库下载依赖项。因此,当您启动命令并且项目需要本地存储库中不存在的工件时,Maven仍将按其声明顺序尝试存储库,但它将跳过它已知失败的存储库。

但您可以通过在命令行上传递the -U flag来强制它绕过此机制。它强制Maven更新版本和快照依赖项,而不查看.lastUpdated文件。这样,它将重新尝试每个活动的远程存储库。