鉴于我在settings.xml中使用mirrorOf *,我应该在哪里定义maven存储库?

时间:2014-04-02 08:19:35

标签: maven nexus

我的网络上有一个nexus repo。在构建服务器上的settings.xml中,我们有

<mirror>
    <id>company.com</id>
    <name>nexus</name>
    <url>http://build.company.com/nexus/content/groups/public/</url>
    <mirrorOf>*</mirrorOf>
</mirror>

在这个构建服务器上,我们为公共存储库定义了许多代理存储库,并且我在托管存储库中有一些商业许可的工件。

如果没有这个,Maven无法解析我的父pom(nexus中的工件):

<profiles>
  <profile>
    <id>repos</id>
    <repositories>
      <repository>
        <id>my-local-repo</id>
        <name>bootstrapthingy</name>
        <url>http://build.company.com/nexus/content/groups/public/</url>
        <releases>
          <enabled>true</enabled>
        </releases>
        <snapshots>
          <enabled>true</enabled>
          <checksumPolicy>fail</checksumPolicy>
          <updatePolicy>always</updatePolicy>
        </snapshots>
      </repository>
    </repositories>
  </profile>
</profiles>
<activeProfiles>
  <activeProfile>repos</activeProfile>
</activeProfiles>

我今天的问题:

我也删除了所有

<repositories>
来自父pom的

标签表示所有项目(最终应该!)继承,并且一切似乎都有效。

这好吗?当我与maven合作时,我似乎最终想到了最佳实践 - 最近,在哪里应该保存信息?

由于我的存储库现在已在Nexus级别定义,因此我的构建元素不再受源代码控制,这让我很烦恼。

1 个答案:

答案 0 :(得分:1)

是的,我会说你走在正确的轨道上!

Maven建议考虑您的基础设施并进行规划!由此,它将项目问题从基础设施方面分离出来。特定于项目的配置会进入pom.xml,而我会投票将基础架构配置放入settings.xml

因此公司镜像/代理进入settings.xml(基础设施可能会发生变化)及其身份验证和环境设置(项目无关!)

通常项目不依赖于每个项目的存储库。如果他们这样做,他们几乎可以在任何情况下使用nexus服务器(假设显式的SNAPSHOT依赖)。所以在pom.xml中没有存储库的做法是可以的。 URL的更改和构建不应在不同位置请求工件。它会危及您的构建重现能力(就像将各种不稳定的远程回购添加到nexus中一样)。

我认为在公司内你需要考虑(或只是承认)项目中的构建不是自我维护的。大多数开源项目都是因为他们没有共同的基础设施,他们可能会受益(或受到影响?)。您需要充分利用它,但在settings.xml中解决基础结构问题也意味着项目不再需要这样做了。有专业人士和骗子 - 毫无疑问:)