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

cwa*_*ash 29 java maintenance maven-2 repository

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

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

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

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

sal*_*sal 28

我建议设置一个至少有四个存储库的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标记定义内部快照和释放repos .我知道很多人告诉你不要这样做.虽然我自由地承认这样做存在各种问题,但如果客户端只构建要部署到单个内部存储库的版本和快照,则可以正常工作.

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

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

  • 作为更新,Sonatype在2010年初以1.5版本开放了他们对Nexus的LDAP支持. (2认同)

cgp*_*cgp 7

绝对使用Nexus.:P

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

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