【问题标题】:Minimize build time for Gradle project on Docker最小化 Docker 上 Gradle 项目的构建时间
【发布时间】:2020-12-01 10:50:09
【问题描述】:

想象一下,我需要构建一个大的 Cuba 应用程序(它使用 Gradle 来管理依赖项并在构建中生成一个 .war)。

我需要对构建和应用程序进行 dockerize。后者在复制.war 的Tomcat 映像中运行。

大多数依赖项实际上在项目的连续构建之间保持不变,但构建似乎每次都超过它们,就像永远一样......

我想从gradle:jdk8(有点)生成一个自定义 Docker 映像,它会导入所有 Gradle 依赖项。 他的图像将用于连续构建以生成.wars,并且仅当依赖项的版本发生更改时才会重新构建。

不过,我对 Gradle 很陌生,我不知道:

  • 是否可以在不构建项目的情况下导入依赖项;
  • 是否真的可以使用之前导入的依赖项在更短的时间内构建项目。

有什么建议/建议吗?这可能吗? 希望我的问题很清楚,但我很难解释我的目标。问我更好的解释。 提前致谢。

【问题讨论】:

  • 您是仅在本地机器上构建,还是在分布式环境中构建?你会在同一台机器上同时运行构建吗?
  • 好问题。我的计划是构建 GitLab 管道。

标签: docker gradle cuba-platform


【解决方案1】:

您的意思是要为构建运行程序(或构建代理)构建 Docker 映像,对吗?

  1. 在不构建项目的情况下无法导入依赖项,因为 Gradle 会延迟解析依赖项,仅在需要时才解析。 例如。构建 CUBA 主题的工件仅在构建 Web 主题时才被解析。

  2. 是的,可以重新使用以前下载的库工件(缓存在 ~/.gradle/caches 中)在更短的时间内构建项目。

因此,在您的情况下,您需要通过在 Docker 容器中完全构建您的项目来创建构建运行程序的 docker 映像。依赖项将被下载并缓存在文件系统中。然后,您可以拉取该映像并再次将其用于后续构建,避免重新下载工件。

如果您在项目中更改 CUBA 平台版本,如果您想避免每次构建都下载 cuba-*.jar 工件,则需要重新创建构建运行器映像。

【讨论】:

  • 非常感谢您的回答。顺便说一句,是的,我的意思是构建代理的 Docker 映像。
猜你喜欢
  • 2018-03-29
  • 2017-01-19
  • 2020-05-16
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多