为什么maven在不同repo中存在多个依赖项时使用了错误的存储库?

为什么maven在不同repo中存在多个依赖项时使用了错误的存储库?,maven,Maven,我有一个settings.xml文件,其中包含以下内容 <settings> <mirrors> <mirror> <!--This sends everything else to /jpmc-public --> <id>PRIVATE-SNAPSHOT</id> <mirrorOf>PRIVATE-SNAPSHO

我有一个settings.xml文件,其中包含以下内容

<settings>
    <mirrors>
        <mirror>
            <!--This sends everything else to /jpmc-public -->
            <id>PRIVATE-SNAPSHOT</id>
            <mirrorOf>PRIVATE-SNAPSHOT</mirrorOf>
            <url>https://url1</url>
        </mirror>
        <mirror>
            <id>PRVATE</id>
            <mirrorOf>PRIVATE</mirrorOf>
            <url>https://url2</url>
        </mirror>
        <mirror>
            <id>public</id>
            <mirrorOf>*,!PRIVATE,!PRIVATE-SNAPSHOT</mirrorOf>
            <url>http://url3</url>
        </mirror> 
    </mirrors>
    <profiles>
        <profile>
            <id>local</id>
            <pluginRepositories>
                <pluginRepository>
                    <id>public</id>
                    <url>http://url</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
            <repositories>
                <repository>
                    <id>PRIVATE-SNAPSHOT</id>
                    <url>https://url1</url>
                    <releases><enabled>false</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
                <repository>
                    <id>PRIVATE</id>
                    <url>https://url2</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>false</enabled></snapshots>
                </repository>
                <repository>
                    <id>public</id>
                    <url>http://url3</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>false</enabled></snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
    ...
</settings>

私有快照
私有快照
https://url1
PRVATE
私有的
https://url2
公众的
*,!私有的私有快照
http://url3
地方的
公众的
http://url
真的
真的
私有快照
https://url1
假的
真的
私有的
https://url2
真的
假的
公众的
http://url3
真的
假的
...
然后我的pom里有这样的东西

<dependencies>
    <dependency>
        <groupId>some.group</groupId>
        <artifactId>public-lib</artifactId>
        <version>${version}</version>
    </dependency>
    <dependency>
        <groupId>come.other.group</groupId>
        <artifactId>private-lib</artifactId>
        <version>${scala.test}</version>
    </dependency>
</dependency>

一些
公共图书馆
${version}
来吧,其他人
私人图书馆
${scala.test}

但当我运行它时,它试图从私有回购中获取公共lib,但失败了。如果我编辑设置以删除存储库标记,那么它可以很好地获取公共内容,但无法尝试从公共repo获取私有内容。我怎么能说特定的依赖性来自于特定的回购?

一般情况如下:

  • 无法定义从哪个存储库提取给定依赖项

  • 您不需要定义从哪个存储库提取给定依赖项。Maven查看所有存储库,只有在它们都不包含时才会失败

  • 但是:

    • 您可以通过
      settings.xml
      中的错误镜像混淆Maven
    • 在极少数情况下,如果其中一个存储库被破坏,Maven解析会停止

    在公司中,通常最好运行Nexus或Artifactory,并向其中添加所有相关的本地和远程存储库。然后,您可以将Nexus/Artifactory作为
    设置中的镜像。xml

    请扔掉前两个镜像定义,然后再试一次。实际上,我认为我可能错了,我现在正在测试该迭代,请给我一点确认,但这看起来可能已经起作用了。