【问题标题】:How to build gradle subprojects with consistent command?如何使用一致的命令构建 gradle 子项目?
【发布时间】:2022-02-04 08:45:54
【问题描述】:

我正在尝试创建一个可以构建我的任何项目的参数化 jenkins 任务。我的项目有一些共同点,因此它们被组织在一个层次结构下:

---p1
 |-p2
 |-p3
 |-p4
 |-p5--p5a
     |-p5b

所以我使用如下命令构建 p1-p4 中的任何一个:

gradle :${project}:bootWar

我在顶级 settings.gradle 中有:

include 'p1', 'p2', 'p3', 'p4', 'p5:p5a', 'p5:p5b'

但 p5 不同,它有 2 个子项目。我无法使用上述命令构建 p5,因为它说:

在项目“:p5”中找不到任务“bootWar”。

这看起来很奇怪,因为我可以做到:

cd p5 ; gradle bootWar

它以某种方式起作用,它在 2 个子项目中调用 bootWar 任务。但在 Jenkins 中这样做并不是很方便。

如何配置gradle,这样我就可以在顶层文件夹中,进入

gradle :p5:bootWar

并让它在两个子项目中执行 bootWar 任务?

【问题讨论】:

  • 如果您从多项目的根目录运行gradlew bootWar,并且不指定哪些子项目,那么bootWar 任务将在包含该任务的每个子项目中运行,而其他任务将被忽略(不会导致错误)。
  • 您是说p5 被配置为p1 的多项目构建中的子项目,而p5 是它自己的多项目构建,p5ap5b 作为其子项目p5 子项目?
  • @Jeff 我不想构建所有子项目。
  • @JeffScottBrown 我在我的 settings.gradle 上方列出了顶层......不知道我还能说什么关于它是如何配置的。 P1、P2、P3、P4、P5a 和 P5b 有自己的 build.gradle。没有其他 build.gradle。目录结构如上,P5a 和 P5b 在 P5 目录下。如果它有助于实现我想要做的事情,我可以添加另一个 build.gradle。 P1、P2、P3、P4 中的每一个都是一个 GIT 存储库。 P5a 和 P5b 位于同一个存储库中,因为它们需要放在一起。

标签: gradle grails build.gradle


【解决方案1】:

我发现 p5 子目录中的以下 build.gradle 可以工作...

tasks.register("bootWar") {
  dependsOn(':p5:p5a:bootWar')
  dependsOn(':p5:p5b:bootWar')
}

tasks.register("clean") {
  dependsOn(':p5:p5a:clean')
  dependsOn(':p5:p5b:clean')
}

这并不理想,因为每个可能的任务都必须在 build.gradle 中列出。出于某种原因,只有一个层次结构的 gradle 似乎能够自动处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多