settings.xml 中 Maven 存储库的顺序

tuk*_*tuk 3 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>
Run Code Online (Sandbox Code Playgroud)

我希望 maven 先检查repo1.maven.org,然后才查看someserver. 有人可以让我知道这是如何实现的吗?

我正在使用 Maven 3.3.9。

我已经解决了这个问题,并试图改变在配置文件中声明 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>
Run Code Online (Sandbox Code Playgroud)

做的时候记录 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
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 5

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

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

但是,你可以通过它迫使绕过这一机制的-U标志在命令行上。它强制 Maven 更新发布和快照依赖项,而不查看.lastUpdated文件。这样,它将重新尝试每个活动的远程存储库。