我有兴趣为我的组织维护一个Maven 2存储库。有哪些指针和陷阱会有所帮助。
在发布代码时,在设置从库中下载或将自己的工件发布到存储库的标准时,用户应遵循哪些准则?您为此类事物制定了哪些治理/规则?您在开发人员指南/文档中包含了哪些内容?
更新:我们已经站起来对Nexus表示非常满意 - 遵循Sal的大部分指导方针并没有遇到任何麻烦。此外,我们通过Hudson CI服务器限制了部署访问和快照构件的自动构建/部署。 Hudson可以分析所有上游/下游项目依赖项,因此如果编译问题,测试失败或其他一些违规导致构建中断,则不会发生部署。厌倦了在Maven2 / Maven3中进行快照部署,因为元数据在两个版本之间发生了变化。 “仅限Hudson”快照部署策略将缓解这种情况。我们不使用Release Plugin,但是在将快照移动到释放时已经在Versions plugin周围编写了一些管道。我们也使用m2eclipse,它似乎与Nexus很好地配合,因为从设置文件中它可以看到Nexus并且知道从那里索引工件信息以进行查找。 (虽然我不得不调整其中的一些设置以使其完全索引我们的内部快照。)如果您对此感兴趣,我还建议您使用您的工件部署源jar作为标准做法。我们在超级POM中配置它。
UPDATE2 :我遇到了this Sonatype whitepaper,详细介绍了采用/成熟的不同阶段,每个阶段都有不同的Maven资源库管理器使用目标。
答案 0 :(得分:28)
我建议设置一个至少有四个存储库的nexus服务器。我不推荐神器。免费版的nexus对于不到三组的开发团队来说非常好。如果你有更多的用户,请帮自己一个忙,并为Sonatype版本付费。 LDAP集成为自己付出了代价。
配置Nexus以执行以下内部存储库
拥有一个使用这四个来源且只有这四个来源的公共settings.xml文件。如果您需要自定义此设置,请尝试保留设置的公共部分文件并使用配置文件了解差异。不要让您的客户只是滚动他们自己的设置,否则您最终会得到构建在一台机器上而不是在任何其他机器上的代码。
为您的客户提供通用代理。在Nexus中,您可以向常见的Maven源(Apache,JBoss,Codehaus)添加一堆代理,并将一个代理暴露给内部客户端。这样可以更轻松地从客户端添加和删除源。
请勿在同一存储库中混合使用内部和第三方工件。 Nexus允许您通过web gui将jar添加到内部存储库。我建议将此JDBC驱动程序和其他外部代码添加到第三方。与大多数企业软件相比,UI非常好用。
定义公共父POM ,通过 distributionManagement 标记定义内部快照和发布回购。我知道很多人告诉你不要这样做。虽然我自由地承认这样做存在各种问题,但如果客户端只构建要部署到单个内部存储库的版本和快照,则可以正常工作。
如果您有一个错误管理的Maven存储库,请创建一个名为 Legacy 的第五个存储库,并将整个存储库放在那里。设置一个cron任务,一旦他们一岁,就从旧版中删除旧文件。这让每个人都有一年的时间离开它并更新他们的poms。
建立易于遵守内部工件的命名约定。我更喜欢 Department.Function.Project 的GroupID和 componentName 。对于内部存储库,com / org / net和公司名称可能无关紧要。如果公司更名,那就错了。销售,会计或库存部门重新命名的可能性要小得多。
答案 1 :(得分:7)
绝对使用Nexus。 :P
我使用了Nexus和Artifactory。 Nexus的界面更加强大,它更加可配置,当然,由Sonatype编写,几乎可以很好地重复Maven。
话虽这么说,Artifactory是体面和可行的。
答案 2 :(得分:4)
使用Artifactory。
答案 3 :(得分:4)
我自己使用Artifactory,并且喜欢用户界面和易于部署/维护。也就是说,我从未使用过Nexus,并且无法真正帮助您进行适当的功能比较。
以下是一些我最喜欢Artifactory的东西(请记住,Nexus也可能有这些功能):
鉴于实际上只有两个主要的Maven Repository实现,如果你真的想确保你做出了正确的选择,我建议你尝试两种方式,并自己决定哪种方式更好。
答案 4 :(得分:3)
也许这很明显,但是,为了重现性,开发人员不应该覆盖工件,它们应该是新版本。
这也适用于上游存储库。如果你下载Apache-commons版本1.2.3,你真的不应该再次下载它。修复来自后一版本,不适用于现有版本。
答案 5 :(得分:3)
需要考虑的其他事项:
答案 6 :(得分:3)
作为 ORIGINAL QUESTION (构建M2存储库时需要考虑的技术问题),我建议创建只读用户,以便按管理员浏览存储库和管理用户(说:一读) - 仅为非管理员用户的用户)。 此外,我建议定期生成备份图像(也许每天一次?)。如果您的存储库很大或者您不时安装自己的工件,这一点非常重要。
最后但并非最不重要的是,在添加新的远程存储库时,必须添加包含/排除过滤器,以便更快地完成存储库中的工件查找。
还有许多其他问题需要考虑,但这些是我在管理Maven内部存储库时遇到的主要问题。
为了记录,我正在使用Nexus和Artifactory;我可以清楚地说,虽然Nexus非常简单和有效(虽然我有时在Ubuntu上安装过程有问题),但它的免费版本无法与Artifactory的社区(免费)版本竞争。 除了Artifactory的令人敬畏的Web 2 UI之外,其主要功能(如安全管理,定期备份和可访问性问题)远远超出了Nexus。