在Maven中使用多个存储库

在Maven中使用多个存储库,maven,Maven,我有一个使用内部存储库和中央存储库的项目。有没有一种方法可以配置settings.xml,这样我就可以同时使用这两种设置而不是一种?当我加上 <mirrors> <mirror> <id>MY ID</id> <url>MY URL</url> <mirrorOf>*</mirrorOf> </mirror> </mir

我有一个使用内部存储库和中央存储库的项目。有没有一种方法可以配置settings.xml,这样我就可以同时使用这两种设置而不是一种?当我加上

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

我的身份证
我的网址
*
在settings.xml中,我可以查看自己的内部存储库,但它会覆盖中央存储库


我确信这是Maven新手经常遇到的问题。

您的镜像指令目前正在镜像所有内容。您可以排除命名存储库,因此:

<mirrorOf>!myExcludedRepo,*</mirrorOf>
!Myeludedrepo*
除了名为
myExcludedRepo
的存储库之外,上面的内容都是镜像的


这是我的建议。特别注意标记为Advanced的部分。这里有很多功能。

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

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

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

<mirrorOf>*,!MyOtherRepository</mirrorOf>
*,!肌病治疗库
如果您有多个本地存储库服务器,这是可行的,但我认为您不能以这种方式排除central:默认情况下,Maven在central中查找工件,而您的服务器充当它的代理


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

我找到了一个可行的答案,那就是按照

感谢各位的回答,我认为您的建议对于具有更多存储库和复杂配置的更复杂场景非常有用。

我使用三个repo(使用Nexus),第一个是代理存储库,我将所有外部存储库添加到其中。另外两个是用于部署版本和快照的内部存储库。以下是my.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>

真的
假的
关系
外部:*
http://localhost:3129/nexus/content/groups/public
关系
中心的
http://central
真的
真的
内部版本
http://localhost:3129/nexus/content/repositories/releases
真的
假的
内部快照
http://localhost:3129/nexus/content/repositories/snapshots
假的
真的
中心的
http://central
真的
真的
真的
真的
关系
内部版本
管理
XXX
内部快照
管理
XXX
Maven全部使用它们,因此您可能希望使用Nexus的路由功能来阻止“^/my/private/packages/*”,这样它就不会尝试从外部存储库获取内部包。我还没有将内部回购添加到代理回购中


您无需调整pom.xml文件即可使其正常工作。只需输入“mvn deploy”。

不,我实际上有一个远程存储库,为其他几个人的工件提供服务。我需要设置s.t.maven检查中央存储库和远程存储库的结果。同样,最简单的方法是使用本地存储库服务器作为代理。我认为您的(父)POM中有显式的
条目。很高兴您找到了它,尽管“在您的POM中留下显式的存储库条目”对我来说似乎很清楚。很好。我会接受你的答案:)(尽管那里的链接提供了低层次的解决方案)。