Configuration Gradle自定义任务是否仅应用于某些子项目?
我已经创建了一个自定义Configuration Gradle自定义任务是否仅应用于某些子项目?,configuration,build,gradle,subproject,Configuration,Build,Gradle,Subproject,我已经创建了一个自定义herpderpGradle任务: task herpderp(type: HerpDerpTask) class HerpDerpTask extends DefaultTask { @TaskAction def herpderp() { println "Herp derp!" } } 这样,我可以将此任务添加到其他Gradle构建中,并在其他项目的构建调用中使用它: gradle clean build herpderp
herpderp
Gradle任务:
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'
)
}
}
include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
其中myapp/settings.gradle
是:
subprojects {
apply plugin: 'groovy'
sourceCompatibility = '1.7'
targetCompatibility = '1.7'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile (
'org.codehaus.groovy:groovy-all:2.3.7'
)
}
}
include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
我希望能够导航到父myapp
目录,并运行gradler clean build herpderp
,并使herpderp
任务仅在myapp客户端
和myapp共享
项目(而不是服务器项目)上运行
因此,听起来我需要另一个自定义任务或myapp/build.gradle
中的某种类型的闭包/方法:
清洁构建
;然后cd
)放入myapp客户端
并运行herpderp
;然后myapp shared
并运行herpderp
要从父构建命令调用
herpderp
,但仅在客户端和共享子项目中执行,我需要向我的任何文件中添加什么内容?以下代码可以完成此任务(应放在myapp/build.gradle
中):
如中所示,您可以通过以下方式筛选子项目并对其进行配置:
configure(subprojects.findAll { it.name.endsWith("server") }) {
apply plugin: 'com.google.cloud.tools.jib'
jib {
from {
image = 'openjdk:alpine'
}
}
...
}
您可以在给定模块中使用以下命令运行
herpderp
任务:gradle:myapp shared:herpderp
谢谢@Opal-那么您是说gradle clean build:myapp client:herpderp:myapp shared:herpderp
?如果是这样的话,我是否可以做些什么来包装它(看起来有点讨厌),以便简化构建调用?也许有一种方法可以包装herpderp
,使gradle clean build smartHerpDerp
与gradle clean build:myapp client:herpderp:myapp shared:herpderp
相同。有什么想法吗?再次感谢!是的,这就是我们所想的。您还可以只向指定的子项目添加herpderp
。我马上就去做。非常感谢@Opal(如果我有代表的话,我会投票给你)!但是,我的构建调用在父myapp
目录中是什么?只是gradle clean build
?再次感谢!在myapp
目录中,只需运行gradle clean build herpderp
,然后clean
和build
将在所有项目中调用,并且herpderp
仅在指定的(shared
和client
)中调用。您不必回答这个@Opal(我已经接受了您的答案,再次感谢!)但我只是好奇这里发生了什么。如果我运行gradle clean build herpderp
,gradle怎么知道执行你的findAll
闭包,并且只为所选子项目配置HerpDerpTask
?需要更详细的解释:让我们继续聊天:谢谢,但看起来我没有足够的代表加入聊天室(因此要求最少20人)。