4

我理解设置 Maven 镜像的部分吸引力,例如:

<mirror>
  <id>nexus</id>
  <name>Maven Repository</name>
  <mirrorOf>*</mirrorOf>
  <url>http://server:8081/nexus/content/groups/public</url>
</mirror>

...是文档说明:

您可以强制 Maven 通过镜像所有存储库请求来使用单个存储库。

但是,这是否也表明通过设置镜像必须强制*每个工作站通过镜像?

我问是因为我希望每个工作站都进行故障转移并直接连接到它知道的任何公共存储库,以防 Nexus 无法解析依赖项或插件。(在一个完美的世界中,每个开发人员都有权根据需要添加额外的代理存储库。但是,有时该访问不可用;有时 Nexus 服务器出现故障;有时它会遇到 Java 堆错误。)

在 Maven 2 中,这种“镜像但直接连接到公共存储库”故障转移配置是否可行?它会出现在 Maven 3 中吗?

4

4 回答 4

5

不,没有故障转移模式。您可以使用 将某些存储库排除在镜像之外<mirrorOf>*,!repository</mirrorOf>,或者您可以拥有两个settings.xml行为不同的文件,并--settings在需要时切换使用。

于 2010-03-19T02:40:08.467 回答
2

这在 Maven 2 中是不可能的。在未来的 Maven 3 中可能会。我们还考虑在 Nexus 中添加这种可能性来动态代理工件。最重要的是,大多数组织都希望控制开发人员使用的代理存储库,因此该功能在存储库管理器中非常流行。

出于同样的原因,让开发人员机器直接从访问 repo 管理器回退到 repos 是不可取的。然后,您最终会失去您获得的代理缓存、共享、过滤等所有好处。

于 2010-03-19T13:08:37.870 回答
1

一个答案(隐含在我的问题中)是这在设计上是不可能的。Jason Van Zyl 在这张票末尾的评论表明

真镜不是特意检查的。如果我们开始这样做,这些天存储库管理器的工作方式将被严重破坏。

于 2010-03-18T16:07:16.400 回答
0

这种配置也是可以的。它工作得很好,但是有一个艰难的情况,如果项目层次结构很大并且并非所有孩子都有相同的父母,那么你甚至必须将这部分复制到他们的 pom 中。这意味着除了在项目中声明这个假中心的项目之外的任何地方,即要查看的默认存储库,您的请求将转到适当的 maven 中心或项目的 pom.xml 中的其他声明的存储库。CATCH:您使用插件 X——也许实际上并没有意识到它——并且插件 X 依赖于工件 Y,它在它自己的 pom 中声明了 repo.... >>> 无法控制代理所有对依赖项的请求关系

另一种选择是为项目提供额外的 settings.xml 并“提供”它 $mvn -s settings.xml

第三种选择是全局 settings.xml 如下所示,并且仅在需要时激活 -P nexus,因为如果没有伪造的中央存储库,它会令人惊讶地工作。

<settings>
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>nexus</name>
            <url>http://localhost:8082/nexus-webapp-1.6.0/content/groups/public</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>

                <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>  
        </profile>
    </profiles>
    <activeProfiles>

    </activeProfiles>
</settings>

在另一个选项卡/窗口中打开图像。 在此处输入图像描述

于 2011-07-24T13:52:52.607 回答