maven 如何处理多个 <repository> 配置?

smw*_*dia 6 maven-3 maven

我对 maven 越来越习惯了。但是还是有些问题。

我有多个<repository>在我的pom.xml

  • 下载工件时,Maven 将如何处理这些存储库?会按申报顺序搜索吗​​?

  • 除了明确声明的之外,maven 还会检查默认的centralrepohttp://repo.maven.apache.org/maven2/吗?

  • 如果在 中找不到某些东西explicitly configured repo,maven 会回退到默认的中央仓库吗?

  • 使用多个 repos 好不好?我有点担心不一致。

以下是<repositories>我的部分pom.xml

<repositories>
    <repository>
        <id>ibiblio-central-repo</id>
        <layout>default</layout>
        <name>ibiblio-central-repo</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.ibiblio.org/maven2/</url>
    </repository>

    <repository>
        <id>oschina-central-repo</id>
        <layout>default</layout>
        <name>oschina-central-repo</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.oschina.net/content/groups/public/</url>
    </repository>

    <repository>
        <id>oschina-central-repo-3rd-party</id>
        <layout>default</layout>
        <name>oschina-central-repo-3rd-party</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
    </repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)

A_D*_*teo 9

下载工件时,Maven 将如何处理这些存储库?会按申报顺序搜索吗​​?

作为合并设置的一部分的声明顺序(请参阅下一个答案)。我发现这张JIRA 票提供了更多详细信息。

除了明确声明的之外,maven 还会检查http://repo.maven.apache.org/maven2/的默认中央仓库吗?

是的,因为它将由 Maven 超级 POM 提供,它是所有 Maven Pom 的隐式父级(这里是一个官方示例),除非在您的 settings.xml 中指定(如果您覆盖超级 POM 中指定的存储库 ID)。您可以使用 Maven 帮助插件来获取Maven 将应用于您的构建的有效设置,并且有效的 pom maven 将实际(有效)运行。
如此处所述,该repositories元素是继承的。

如果在显式配置的 repo 中找不到某些东西,maven 会回退到默认的中央 repo 吗?

如上。此外,您还可以通过任何配置的Maven mirror影响此机制。例如,您可以将 Maven 重定向到您公司的存储库(见下文),而不是查找默认存储库。

使用多个 repos 好不好?我有点担心不一致。

您可能不需要很多已配置的存储库,但如果默认存储库未提供您要查找的依赖项,则可能需要多个。一个好的方法是拥有一个企业 Maven 存储库(即 Artifactory、Nexus)并使您的本地设置仅指向它。然后,将内部 Maven 存储库配置为以集中(和受管控)方式指向其他存储库。