维护内部Maven存储库的提示?

我有兴趣为我的组织维护一个Maven 2存储库。 有哪些指针和陷阱会有所帮助。

在发布代码时,在设置从库中下载或将自己的工件发布到存储库的标准时,用户应遵循哪些准则? 您为此类事物制定了哪些治理/规则? 您在开发人员指南/文档中包含了哪些内容?

更新 :我们已经站起来对Nexus非常满意 – 遵循Sal的大部分指导方针并没有遇到任何麻烦。 此外,我们通过Hudson CI服务器限制了部署访问和快照构件的自动构建/部署。 Hudson可以分析所有上游/下游项目依赖项,因此如果编译问题,测试失败或其他一些违规导致构建中断,则不会发生部署。 厌倦了在Maven2 / Maven3中进行快照部署,因为元数据在两个版本之间发生了变化。 “仅限Hudson”快照部署策略将缓解这种情况。 我们不使用Release Plugin,但是在将快照移动到发布时,已经在Versions插件中编写了一些代码。 我们也使用m2eclipse,它似乎与Nexus很好地配合,因为从设置文件中它可以看到Nexus并且知道从那里索引工件信息以进行查找。 (虽然我不得不调整其中一些设置以使其完全索引我们的内部快照。)如果您对此感兴趣,我还建议您使用您的工件部署源jar作为标准做法。 我们在超级POM中配置它。

更新2 :我遇到过这篇Sonatype白皮书 ,其中详细介绍了采用/成熟的不同阶段,每个阶段都有一个Maven资源库管理器的不同使用目标。

我建议设置一个至少有四个存储库的nexus服务器。 我不推荐神器。 免费版的nexus对于不到三组的开发团队来说非常好。 如果你有更多的用户,请帮自己一个忙,并为Sonatype版本付费。 LDAP集成为自己付出代价。

  1. 内部发布
  2. 内部快照
  3. 内部第三方用于内部使用的代码来自外部来源,或者用于认可的第三方版本。 在这里放置来自客户端和合作伙伴的JDBC驱动程序,javax。*东西和东西。
  4. 外部代理通用代理所有常见的来源,如m2,codehaus等

配置Nexus以执行以下内部存储库

  1. 定期删除旧快照
  2. 在发布时删除快照
  3. 构建索引文件。 这也加速了本地构建

有一个公共settings.xml文件,它使用这四个,只有这四个来源。 如果您需要在此之外进行自定义,请尝试保留设置文件的公共部分 ,并使用配置文件来区分差异。 不要让您的客户只是滚动他们自己的设置,否则您最终会得到构建在一台机器上但不在任何其他机器上的代码。

为您的客户提供通用代理。 在Nexus中,您可以向常见的Maven源(Apache,JBoss,Codehaus)添加一堆代理,并将一个代理暴露给内部客户端。 这样可以更轻松地从客户端添加和删除源。

不要在同一存储库中混合使用内部和第三方工件 。 Nexus允许您通过web gui将jar添加到内部存储库。 我建议将此JDBC驱动程序和其他外部代码添加到第三方。 与大多数企业软件相比,UI非常好用。

定义公共父POM ,通过distributionManagement标记定义内部快照和发布回购。 我知道很多人告诉你不要这样做。 虽然我自由地承认这样做存在各种问题,但如果客户端只构建要部署到单个内部存储库的版本和快照,则可以正常工作。

如果您有一个错误管理的Maven存储库 ,请创建一个名为Legacy的第五个存储库 ,并将整个存储库放在那里。 设置一个cron任务,一旦他们一岁,就从旧版中删除旧文件。 这让每个人都有一年的时间离开它并更新他们的poms。

建立一个易于遵守内部工件的命名约定。 我更喜欢Department.Function.Project的 GroupID和该componentName的ArtifactId。 对于内部存储库,com / org / net和公司名称可能无关紧要。 如果公司更名,那就错了。 销售,会计或库存部门重新命名的可能性要小得多。

绝对使用Nexus 。 :P

我使用了Nexus和Artifactory。 Nexus的界面更加强大,它更加可配置,当然,由Sonatype编写,他几乎可以很好地重复Maven。

话虽这么说,Artifactory是体面和可行的。

  • 对Nexus vs. Artifactory的评论
  • 天啊! 当然,这是关于此事的SO问题。
  • Sonatype进行function比较
  • jFrog(Artifactory的制造商)进行function比较

使用Artifactory 。

我自己使用Artifactory,喜欢用户界面和易于部署/维护。 也就是说,我从未使用过Nexus,并且无法真正帮助您进行适当的function比较。

这里有一些我最喜欢Artifactory的东西(请记住,Nexus也可能有这些function):

  1. 不错的Web 2.0界面。
  2. 能够导入本地Maven存储库以帮助您入门。
  3. 易于与现有LDAP服务器集成以实现安全性(我是用于存储凭据的单个存储库的忠实粉丝)。

鉴于实际上只有两个主要的Maven Repository实现,如果你真的想确保你做出了正确的选择,我建议你尝试两个,并自己决定哪个更好。

也许这是显而易见的,但是,为了重现性,开发人员不应该覆盖工件,它们应该是新版本。

这也适用于上游存储库。 如果你下载Apache-commons版本1.2.3,你真的不应该再次下载它。 修复来自后一版本,不适用于现有版本。

还需要考虑的事情:

http://archiva.apache.org/

作为原始问题 (构建M2存储库时需要考虑的技术问题),我建议创建只读用户来浏览每个管理员的存储库和管理用户(也就是说:所有那些不是用户的只读用户)管理员)。 此外,我建议定期生成备份图像(也许每天一次?)。 如果您的存储库很大或者您不时安装自己的工件,这一点非常重要。

最后,但并非最不重要的是,在添加新的远程存储库时,必须添加包含/排除filter,以便更快地完成存储库中的工件查找。

还有许多其他问题需要考虑,但这些是我在管理Maven内部存储库时遇到的主要问题。

为了记录,我正在使用Nexus和Artifactory; 我可以清楚地说明,虽然Nexus非常简单和可操作(虽然我有时在Ubuntu上安装过程有问题),但它的免费版本无法与Artifactory的社区(免费)版本竞争。 除了Artifactory令人敬畏的web 2用户界面外,其主要function(如安全管理,定期备份和可访问性问题)远远超出了Nexus。