我有兴趣为我的组织维护Maven 2存储库。有哪些指针和陷阱会有所帮助。
为用户设置在发布代码时从存储库下载或发布自己的工件的标准时应遵循哪些准则?您对这类事情有什么样的治理/规则?您在开发人员指南/文档中包括了哪些内容?
更新:我们已经站在Nexus上,并且对此感到非常满意-遵循Sal的大多数指南,并且没有遇到任何麻烦。此外,我们还限制了通过Hudson CI服务器进行部署访问以及快照构件的自动构建/部署。 Hudson可以分析所有上游/下游项目相关性,因此,如果编译问题,测试失败或某些其他违规导致构建中断,则不会进行部署。厌倦了在Maven2/Maven3中进行快照部署,因为两个版本之间的元数据已更改。 “仅Hudson”快照部署策略将减轻这种情况。我们不使用发布插件,但是在将快照移动到发布时在Versions plugin周围写了一些管道。我们还使用了m2eclipse,它似乎可以很好地与Nexus配合使用,因为从设置文件中它可以看到Nexus并知道可以为此处的工件信息编制索引。 (尽管我不得不调整一些设置以使其完全索引我们的内部快照。)如果您对此感兴趣,我还建议您将带有工件的源jar部署为标准做法。我们在 super POM中进行配置。
UPDATE2 :我遇到过this Sonatype whitepaper,其中详细介绍了采用/成熟度的不同阶段,每个阶段针对Maven存储库管理器都有不同的使用目标。
最佳答案
我建议设置一台至少包含四个存储库的nexus服务器。我不推荐人工制品。 nexus的免费版本非常适合少于三个小组,少于20个开发团队。如果您拥有更多的用户,请帮自己一个忙,并为Sonatype版本付费。 LDAP集成是值得的。
配置Nexus以对内部存储库执行以下操作
有一个公共(public)的settings.xml文件,该文件使用这四个并且仅使用这四个源。 如果您还需要自定义,请尝试保留设置文件的公共(public)部分,并使用配置文件来区别。不要让您的客户只是滚动自己的设置,否则最终您将获得在一台计算机上而不是其他任何计算机上构建的代码。
为您的客户提供通用代理。 在Nexus中,您可以向常见的Maven源(Apache,JBoss,Codehaus)添加一堆代理,并向内部客户端公开一个代理。这使得从客户中添加和删除资源变得更加容易。
不要在同一存储库中混合内部和第三方工件。 Nexus允许您通过Web gui将jar添加到内部存储库。我建议以此为方式将JDBC驱动程序和其他外部代码添加到3rd party。与大多数企业软件相比,UI非常好用。
定义一个公共(public)父POM ,它通过 distributionManagement 标记定义内部快照和发布存储库。我知道很多人告诉你不要这样做。尽管我自由地承认这样做存在各种问题,但如果客户端仅构建要发布到单个内部存储库的发行版和快照,那就可以了。
如果您有一个管理不当的Maven存储库,请创建一个名为Legacy的第5个存储库,并将整个存储库放在此处。设置cron任务,以从旧文件中删除旧文件一年。这使每个人都有一年的时间来更新和更新自己的pom。
为内部工件建立易于遵循的命名约定。 我更喜欢Department.Function.Project的GroupID和那个componentName的ArtifactId。对于内部存储库,com/org/net和公司名称可能无关紧要。如果公司更名,那就错了。销售,会计或库存部门重命名的可能性很小。