docker - 最小化 Docker 上 Gradle 项目的构建时间
问题描述
想象一下,我需要构建一个大型Cuba应用程序(它使用 Gradle 来管理依赖项并在构建中生成一个.war
.
我需要对构建和应用程序进行 dockerize。后者在.war
复制 Tomcat 映像中运行。
大多数依赖项实际上在项目的连续构建之间保持不变,但构建似乎每次都超过它们,就像永远......
我想从gradle:jdk8
(有点)导入所有 Gradle 依赖项的自定义 Docker 映像。他的图像将用于连续构建以生成.war
s,并且仅当依赖项的版本发生更改时才会重新构建。
虽然,我对 Gradle 很陌生,但我不知道:
- 是否可以在不构建项目的情况下导入依赖项;
- 如果实际上可以使用以前导入的依赖项在更短的时间内构建项目。
有什么建议/建议吗?这可能吗?希望我的问题很清楚,但我很难解释我的目标。问我更好的解释。提前致谢。
解决方案
你的意思是你想为构建运行器(或构建代理)构建一个 Docker 映像,对吧?
在不构建项目的情况下无法导入依赖项,因为 Gradle 会延迟解析依赖项,仅在需要时才解析。例如,构建 CUBA 主题的工件仅在构建 Web 主题时才被解析。
是的,可以重新使用以前下载的库工件(缓存在 ~/.gradle/caches 中)在更短的时间内构建项目。
因此,在您的情况下,您需要通过在 Docker 容器中完全构建您的项目来创建构建运行程序的 docker 映像。依赖项将被下载并缓存在文件系统中。然后您可以拉取该图像并再次将其用于后续构建,避免重新下载工件。
如果您在项目中更改 CUBA 平台版本,如果您想避免每次构建都下载 cuba-*.jar 工件,则需要重新创建构建运行器镜像。
推荐阅读
- flutter - 如何解决 Flutter 中的 LateInitializationError?
- visual-studio - 外部键盘快捷键在 atom 或 VS 中不起作用
- node.js - MongoError:将会话选项传递给另一个函数时不允许使用过期会话
- excel - 公式翻译问题 (#NAME?) 多语言用户
- javascript - AsyncStorage 不支持将 null/undefined 作为值传递。如果要删除值,请改用 .remove 方法。在本机反应
- reactjs - 如何使用 Semantic UI React 和钩子获取下拉列表的值
- android - 如何在尝试打开具有特定扩展名的文件时让 android os 建议一个颤振应用程序,例如:.torrent
- c++ - 在 Visual Studio 2019 中使用 std::vector 定义类时未解决的外部符号错误
- coldfusion - Coldfusion 保护管理部分问题
- google-apps-script - 如何在谷歌应用脚本中的网络应用中路由