在Maven中使用多个存储库

时间:2012-10-11 16:54:43

标签: maven

我有一个使用内部存储库和中央存储库的项目。有没有办法可以配置settings.xml,以便我可以使用两者而不是一个?当我添加

<mirrors>
    <mirror>
        <id>MY ID</id>
        <url>MY URL</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

在settings.xml中,我可以查看自己的内部存储库,但它会覆盖中央存储库。

我确信这是Maven新手常见的问题。

4 个答案:

答案 0 :(得分:8)

有几种方法可以做到这一点。

最好的IMO是让您的本地存储库服务器充当Maven Central的代理。 Nexus和Artifactory都是开箱即用的。如果您正在使用Apache或其他Web服务器,则应切换。

您还可以更新设置,从镜像中排除目标服务器:

<mirrorOf>*,!MyOtherRepository</mirrorOf>

如果您有多个本地存储库服务器,这是有效的,但我认为您不能以这种方式排除 central :默认情况下,Maven在中央查找工件,并且您的服务器充当站点 - 为它。

在POMS中留下显式存储库条目,它引用本地存储库。如果您的本地存储库只为您的工件提供服务,那么这可能是第二个最简单的事情(特别是如果您使用包含存储库规范的父POM)。

答案 1 :(得分:4)

您的镜像指令当前正在镜像所有内容。您可以这样排除命名的存储库:

<mirrorOf>!myExcludedRepo,*</mirrorOf>

以上镜像除了名为myExcludedRepo的存储库之外的所有内容。

这是Maven guide for mirroring。请特别注意标有高级的部分。那里有很多功能。

答案 2 :(得分:0)

我找到了一个有效的答案,即改变pom.xml,并按照this link

的指示动态添加远程存储库

感谢您的回答,伙计们,我认为您的建议对于包含更多存储库和复杂配置的更复杂方案非常有用。

答案 3 :(得分:0)

我使用三个repos(使用Nexus),第一个是我添加所有外部存储库的Proxy存储库。另外两个是我用于部署版本和快照的内部存储库。这是我的.m2 / settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html -->

    <interactiveMode>true</interactiveMode>
    <offline>false</offline>

    <mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>external:*</mirrorOf>
        <url>http://localhost:3129/nexus/content/groups/public</url>
    </mirror>
    </mirrors>

    <profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <repository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>

            <repository>
                <id>internal.releases</id>
                <url>http://localhost:3129/nexus/content/repositories/releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>        

            <repository>
                <id>internal.snapshots</id>
                <url>http://localhost:3129/nexus/content/repositories/snapshots</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>        
        </repositories>

        <pluginRepositories>
            <pluginRepository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
        <properties>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>           
        </properties>
    </profile>
    </profiles>

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

    <servers>
    <server>
        <id>internal.releases</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    <server>
        <id>internal.snapshots</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    </servers>

</settings>

Maven全部使用它们,因此您可能希望使用Nexus的路由功能来阻止&#34; ^ / my / private / packages /.*"所以它不会尝试从外部存储库中获取内部包。我还没有将内部回购添加到代理仓库。

您无需调整pom.xml文件即可使用。只需输入&#34; mvn deploy&#34;。