4

我创建了一个自定义herpderpGradle 任务:

task herpderp(type: HerpDerpTask)

class HerpDerpTask extends DefaultTask {
    @TaskAction
    def herpderp() {
        println "Herp derp!"
    }
}

有了这个,我可以将此任务添加到其他 Gradle 构建中,并在其他项目的构建调用中使用它:

gradle clean build herpderp

现在,我有以下多项目设置:

myapp/
    myapp-client/
        build.gradle
        src/** (omitted for brevity)
    myapp-shared/
        build.gradle
        src/** (omitted for brevity)
    myapp-server
        build.gradle
        src/** (omitted for brevity)
    build.gradle
    settings.gradle

在哪里myapp/build.gradle

subprojects {
    apply plugin: 'groovy'
    sourceCompatibility = '1.7'
    targetCompatibility = '1.7'

    repositories {
        mavenLocal()
        mavenCentral()
    }

    dependencies {
        compile (
            'org.codehaus.groovy:groovy-all:2.3.7'
        )
    }
}

在哪里myapp/settings.gradle

include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'

我希望能够导航到父myapp目录,并运行gradler clean build herpderp并让herpderp任务仅在myapp-clientmyapp-shared项目(而不是服务器项目)上运行。

所以听起来我需要另一个自定义任务或某种类型的闭包/方法myapp/build.gradle

  1. 运行clean build;然后
  2. 将( cd) 放入myapp-client并运行herpderp;接着
  3. 落入myapp-shared并运行herpderp

我需要向我的任何文件添加什么才能herpderp从父构建命令中调用,但只能在客户端和共享子项目中执行?

4

2 回答 2

7

以下代码可以解决问题(应该放在 中myapp/build.gradle):

allprojects.findAll { it.name in ['myapp-client', 'myapp-shared'] }. each { p ->
   configure(p) {
      task herpderp(type: HerpDerpTask)
   }
}

class HerpDerpTask extends DefaultTask {
    @TaskAction
    def herpderp() {
        println "Herp derp from ${project.name}!"
    }
}
于 2014-12-28T18:27:47.810 回答
1

Gradle 文档中所述,您可以过滤子项目并以这种方式配置它们:

configure(subprojects.findAll { it.name.endsWith("server") }) {
    apply plugin: 'com.google.cloud.tools.jib'
    jib {
       from {
          image = 'openjdk:alpine'
       }
    }
    ...
}
于 2020-07-03T11:26:56.687 回答