我的网络上有一个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级别定义,因此我的构建元素不再受源代码控制,这让我很烦恼。
答案 0 :(得分:1)
是的,我会说你走在正确的轨道上!
Maven建议考虑您的基础设施并进行规划!由此,它将项目问题从基础设施方面分离出来。特定于项目的配置会进入pom.xml,而我会投票将基础架构配置放入settings.xml
因此公司镜像/代理进入settings.xml(基础设施可能会发生变化)及其身份验证和环境设置(项目无关!)
通常项目不依赖于每个项目的存储库。如果他们这样做,他们几乎可以在任何情况下使用nexus服务器(假设显式的SNAPSHOT依赖)。所以在pom.xml中没有存储库的做法是可以的。 URL的更改和构建不应在不同位置请求工件。它会危及您的构建重现能力(就像将各种不稳定的远程回购添加到nexus中一样)。
我认为在公司内你需要考虑(或只是承认)项目中的构建不是自我维护的。大多数开源项目都是因为他们没有共同的基础设施,他们可能会受益(或受到影响?)。您需要充分利用它,但在settings.xml中解决基础结构问题也意味着项目不再需要这样做了。有专业人士和骗子 - 毫无疑问:)