我有兴趣为我的组织维护一个Maven
2存储库。有哪些指针和陷阱会有所帮助。
设置代码发布时从用户的工件下载或发布到存储库的标准时,用户应遵循哪些准则?您对这类事情有什么样的治理/规则?您在开发人员指南/文档中包括了哪些内容?
更新 :我们已经站起Nexus并对此感到非常满意-遵循Sal的大多数指南,并且没有遇到任何麻烦。此外,我们还限制了通过Hudson
CI服务器的部署访问权限和快照工件的自动构建/部署。Hudson可以分析所有上游/下游项目相关性,因此,如果编译问题,测试失败或某些其他违规导致构建中断,则不会进行部署。厌倦了在Maven2
/
Maven3中进行快照部署,因为两个版本之间的元数据已更改。“仅Hudson”快照部署策略将减轻这种情况。我们不使用Release插件,但是在Versions插件中编写了一些管道当要移动快照以释放时。我们还使用了m2eclipse,它似乎可以很好地与Nexus配合使用,因为它可以从设置文件中看到Nexus并知道要为其中的工件信息编制索引。(尽管我不得不调整一些设置以使其完全索引我们的内部快照。)如果您对此感兴趣,我还建议您将带有工件的源jar部署为标准做法。我们在超级POM中进行配置。
UPDATE2
:我遇到过这份Sonatype白皮书,其中详细介绍了采用/成熟的不同阶段,每个阶段针对Maven存储库管理器都有不同的使用目标。
我建议设置一台具有至少四个存储库的nexus服务器。我不推荐人工制品。nexus的免费版本非常适合少于三个团队,少于20个开发团队的情况。如果您拥有更多的用户,请帮自己一个忙,并为Sonatype版本付费。LDAP集成是值得的。
配置Nexus以对内部存储库执行以下操作
有一个公共的settings.xml文件,该文件仅使用这四个源。 如果您还需要自定义,请尝试保留设置文件的 公共部分 ,并使用
配置文件来区别它们。 不要让您的客户只是滚动自己的设置,否则最终您将获得在一台计算机上而不是其他任何计算机上构建的代码。
为您的客户提供通用代理。
在Nexus中,您可以向常见的Maven源(Apache,JBoss,Codehaus)添加一堆代理,并向内部客户端公开一个代理。这使得从客户中添加和删除资源变得更加容易。
不要 在同一存储库中 混合内部和第三方工件 。Nexus允许您通过Web
gui将jar添加到内部存储库。我建议将此作为将JDBC驱动程序和其他外部代码添加到3rd party的方式。与大多数 企业软件 相比,UI非常好用。
定义一个公共父POM ,该 父POM 通过 distributionManagement
标记定义内部快照和版本库。我知道很多人告诉你不要这样做。尽管我自由地承认这样做存在各种问题,但是如果客户端仅构建要发布到单个内部存储库的发行版和快照,那就可以了。
如果您现有的Maven存储库管理不当 ,请创建一个名为 Legacy 的第5个 存储库 ,并将整个 存储库
放在此处。设置cron任务,以从旧文件中删除旧文件一年。这给每个人一年以摆脱它并更新他们的诗句。
建立内部构件的易于遵循的命名约定。 我更喜欢 Department.Function.Project的 GroupID 和那个
componentName 的ArtifactId 。对于内部存储库,com / org /
net和公司名称可能无关紧要。如果公司更名,那就错了。销售,会计或库存部门重命名的可能性很小。
我们正在尝试将maven依赖项分组到一个单独的maven POM类型的项目中。 我们希望将其用作dependency节点内的POM类型依赖项,以及de dependencyManagement内的BOM(物料清单)。 我们公司内部有一个2存储库。(Apache Archiva-2.2.0)。其中一个用于快照,另一个用于发布。 当我尝试使用snapshot版本时,一切正常,但当我想使用发布的版本时,
我在Maven有一个内部的Nexus存储库,其中部署了一些插件。在nexus存储库中存在一些不存在的依赖jar文件。是否可以将maven配置为在内部存储库中搜索依赖jar文件,如果在maven中心存储库中不存在搜索。 使现代化 做出了与JimHawkins回答中类似的配置。但我仍然认为它只在nexus内部存储库中查找依赖项。以下是它打印的一些debus Messes:
问题内容: 我们正在尝试将Archiva用作中央和其他外部存储库的Maven代理,以及用作我们的工件的快照存储,这些工件由Hudson从SVN自动构建并安装到快照存储库。 我无法将Maven客户端设置为同时使用内部存储库和快照存储库。我的项目有一些外部依赖项(例如),可以从Archiva内部存储库中正确下载。另外,我的项目还依赖于自己的项目,该项目的工件已经构建并安装到快照存储库中。但是,如果我尝
我们正在评估Magento的电子商务解决方案。Magento解决方案是定制的,可以连接到一系列内部系统,用于支付、订单处理和其他功能。 我们正在计划使用少数外部订单状态和内部订单状态来处理从一个集成到另一个集成的系统工作流。我们的策略是,内部状态是我们支持的内部状态,客户看到外部状态,它们一起帮助我们确定每个状态的关闭(例如,支付成功),然后导航到下一步(订单创建)。这样做的原因是,大多数内部服务
我运行一个开源库,正在考虑让它完全接受Maven并将其上传到中央存储库,以便人们可以轻松地将其添加到他们的项目中。 问题在于,它依赖于几个较旧的库,这些库在任何 Maven 存储库中都不存在。目前,这意味着pom文件必须使用依赖项范围。我还阅读了有关为项目创建本地存储库以安装第三方库的信息。 但是,我的印象是,当我将库部署到 Maven 存储库时,这两种方法都不能很好地工作。也就是说,如果它依赖于