【问题标题】:How to reuse maven's .repository contents to avoid redownloading external dependencies on each project's build?如何重用 maven 的 .repository 内容以避免重新下载每个项目构建的外部依赖项?
【发布时间】:2020-11-07 05:16:44
【问题描述】:

我有多个具有外部依赖项的 Jenkins Java 项目。我希望 Jenkins 避免在每次构建时重新下载每个 Maven 项目的外部依赖项(.repository 的内容)。目前,每个项目都使用一个私有 repo,并在每次构建时擦除它的工作区。

这是我想到的解决方案。但是,我对 Jenkins 和 Java 不是很熟悉,所以我处于学习曲线上。

  • 不要为每个项目使用私有 Maven 存储库。为每个项目使用默认的/home/jenkins/.m2/.repository 目录。可以在每个后续构建中使用外部依赖项。
  • 找到一些工具来缓存外部依赖项(这是使用人工制品或联结吗?),因此在每次构建时下载它们并不那么昂贵。
  • 不要在每次构建开始时擦除整个项目工作区。有选择地删除文件并保留工作区的 .repository 目录,以便可以在每次构建时利用该目录。

如何避免每次都重新下载依赖项?有处理上述情况的标准方法吗?最终,我想减少构建时间。下载包需要很长时间,导致构建有时需要 45 分钟或更长时间。

非常感谢您的帮助。

【问题讨论】:

  • "这就是人工制品或联结的用途吗?"除其他外,它们可用于此目的。
  • 第一个问题:45分钟究竟是什么?包括测试/下载等在内的完整构建需要更多信息:您正在运行多少个模块、多少个类以及多少个测试?除了那 45 分钟听起来真的很奇怪......?您是否使用快速机器(带有 SSD 存储;足够的 RAM/CPU?)?并分析究竟需要什么时间?下载?真的使用内部网络吗?如果没有在您的网络等中安装存储库管理器?
  • 感谢您的回答。下载依赖项大约需要 40 分钟,而构建总共需要 45 分钟。我们支持公司代理。 RAM 和 CPU 都不是瓶颈。我认为我的问题的最初意图是找到一种方法来防止从 Maven 中心重新下载依赖项。

标签: java maven jenkins


【解决方案1】:

你说得对。

  • 100% 同意,最好使用通用的本地存储库。所有工件都有版本,可以安全地在不同项目中重复使用它们。
  • 是的,Nexus 和 Artifactory 正是用于此目的。通常,本地网络中的此类本地工具要快得多。此外,它们通常存储构建工件(.jar 或 .war 文件),您可以将其用作其他项目的依赖项。
  • 这点很有道理,但我在实践中没有看到。如果你可以设置它,那么构建时间应该会减少更多。但如果此缓存出现问题(例如缓存损坏的工件),则您必须解决它(可能手动)。

我还建议深入分析构建时间。您实际上在依赖项下载上花费了多少时间?我不相信它需要大部分时间来构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2013-02-04
    • 2012-08-20
    • 2013-04-23
    • 1970-01-01
    • 2012-01-15
    • 2011-02-05
    相关资源
    最近更新 更多