【问题标题】:Maven concurrent builds on CI serverCI服务器上的Maven并发构建
【发布时间】:2013-05-15 13:13:12
【问题描述】:

在我看来,我有一个有趣的案例。我们正在使用 maven,由于我们必须支持我们产品的多个版本,因此我们有时会使用 1.x 和 2.x 构建结构。当 1.x 和 2.x 并行构建时,有时我们会看到

安装工件元数据时出错:安装元数据时出错:更新组存储库元数据时出错

据我所知,本地用户存储库中的 maven-metadata-local.xml(用于工件,而不是工件的版本)同时被另一个 maven 进程写入。有没有办法让 maven 并行构建这两个,但等待文件上的写锁来更新它?

【问题讨论】:

  • 这个问题被归档为MINSTALL-54,自2008年开放。
  • 如果您对此问题感到不安,只需创建一个补丁,它是一个开源项目......
  • 此时,他们将忽略补丁...因为他们是 maven 维护者。多年前就已经提供了一个补丁,但他们忽略了。使用下面的并发安全访问插件。不知道为什么该代码不是核心 maven 的一部分。

标签: java maven jenkins


【解决方案1】:

听起来您正在为所有构建作业使用相同的本地存储库,而您已经知道这将无法正常工作。 Jenkins/Hudson/CI 的重点是为每个构建作业使用本地 maven 存储库。您需要在 Jenkins 中使用本地 maven 存储库进行配置以避免此类情况。

您还可以安装Concurrent Safe Local Repository Access maven 插件,这将允许您使用相同的本地存储库。 (如果您要动态配置代理,则很有用)

【讨论】:

  • 只有在处理 CI 时才使用本地存储库。如果我是开发人员,我可能需要大致同时在本地构建两者。 Maven 应该正确处理这个问题。我会回复@Joe 给的便条。
  • 如果你真的需要同时构建两个项目你可以使用mvn -Dmaven.repo.local=/alternate/repo/location ...。我知道它在 Maven 中不起作用,但从来没有要求在我的本地机器上同时构建两个项目。
  • 如果您想同时访问本地存储库,只需使用Concurrent Safe Local Repository access
【解决方案2】:

使用 Maven 设置 (Admin/Configure) 下的第二个或第三个选项:

这些选项来自:Maven Project Plugin

【讨论】:

    【解决方案3】:

    现在可以从maven 3.8.2开始同时访问存储库

    需要手动安装和配置库for concurrent-safe access

    【讨论】:

      猜你喜欢
      • 2016-06-09
      • 2012-01-03
      • 2011-02-13
      • 2013-10-07
      • 2017-03-25
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多