在 nexus 中存储 maven 工件的最佳实践

Posted

技术标签:

【中文标题】在 nexus 中存储 maven 工件的最佳实践【英文标题】:Best practices for storing maven artifacts in nexus 【发布时间】:2017-03-18 23:56:48 【问题描述】:

在我的公司,我们有团队致力于使用 maven pom 和 gradle 构建脚本构建的服务。我遇到的问题是,当团队构建他们的 Web 应用程序时,一个团队成员创建的 jar 文件需要在他们的 pom 文件中可供其他团队成员使用。

我们当时的想法是拥有一个本地 nexus 存储库,然后将构建的 jar 文件推送到 nexus,这样当任何其他团队成员构建时,他们也可以引用相同的 jar 文件。

但是,这可能会导致版本控制问题,因为如果两个团队成员在同一个项目中更改不同的文件,他们可能会生成相同的 jar 文件。

我想知道的是他们在进行这些类型的构建和版本控制方面的任何最佳实践。

【问题讨论】:

【参考方案1】:

关于如何管理这个过程有许多不同的意见和策略。不过,有些方面比较常见。

我想说有两个关键要素: * 正确使用版本定义和参考 * 自动化构建和关系部署

如果您正在针对特定工件、特定版本进行工作,那么这些更改都应该进入工件的特定编号版本。在工作进行期间,该版本应以“-SNAPSHOT”结尾。发布工作完成后,该版本号应删除“-SNAPSHOT”。您还可能希望在 Nexus 服务器中为“快照”和“发布”工件提供单独的存储库。

关于将工件推送到 Nexus,这应该始终通过自动化来完成。手动推送工件应该非常罕见。当为正在进行的工作完成常规构建时,应该会自动将“-SNAPSHOT”工件部署到快照存储库。当您的构建自动化运行“发布”构建时,这些工件会将发布工件部署到发布存储库。

还有许多其他选项和详细信息您需要检查。仅在此过程中实施在您的情况下提供明确价值的功能。设置比您需要的更复杂的流程非常容易。

【讨论】:

感谢 David,当开发人员正在开发时,我们将使用本地 gradle 脚本构建到一个 nexus 存储库。因此,如果我们有'-SNAPSHOT-' repo,要识别可能正在构建相同 jar 的单个开发人员,最好将开发人员名称添加到该 jar 中。像'-SNAPSHOT-JAMES_E-...'? 不,我认为这没有任何价值。源代码控制具有更改标识,但团队协作构建二进制工件。 好的,知道了。谢谢大卫。将与团队讨论并围绕您提到的内容提出流程。

以上是关于在 nexus 中存储 maven 工件的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

用于创建临时 zip 工件的 Maven 最佳实践

部署原型工件时,Nexus Maven 原型存储库未更新

配置 Maven 或 Nexus 以在静态 URL 链接主干工件

将工件上传到 Nexus,无需 Maven

从 nexus 获取最新的构建工件

是否有将 Jenkins 的构建与 Maven (Nexus) 工件联系起来的插件