gpt4 book ai didi

Gradle聚合任务

转载 作者:行者123 更新时间:2023-12-01 15:49:11 25 4
gpt4 key购买 nike

在我的 gradle 脚本中,我构建了一个运行 java 进程的任务。此过程取决于目标属性。任务定义为:

task('bulk', type: JavaExec, dependsOn: 'classes', description : 'Bulk data import on a target (defined by -Ptarget=[event|member|...]]') {

//available imports
ext{
event = relativePath('src/main/scripts/events.csv')
member = relativePath('src/main/scripts/member.csv')
membership = relativePath('src/main/scripts/membership.csv')
}

//check the target is set
doFirst {
if(!project.hasProperty('target')){

println "\nUsage:"
println "\tgradle bulk -Ptarget=[event|member|...]"
println "where target is : "
bulk.ext.each{ println it }

throw new GradleException('Target argument required')
} else {
println "\nBulk import of $target\n"
}
}

main = 'org.yajug.users.bulkimport.BulkImport'
classpath = sourceSets.main.runtimeClasspath
if(project.hasProperty('target')){
bulk{
args target
args bulk.ext[target]
debug false
}
}
}

并运行它:

gradle bulk -Ptarget=event

它工作正常,但我知道我必须为不同的目标运行这个过程:

gradle bulk -Ptarget=event
gradle bulk -Ptarget=member
gradle bulk -Ptarget=membership
...

如何使用 gradle 的依赖模型将所有这些调用分组到另一个任务中?(我知道目标列表)

解决方案

task bulk;
['event','member','membership'].each {target ->
task("bulk${target}", type: JavaExec, dependsOn: 'classes', description : "Bulk data import of ${target}s") {

//available imports
ext{
event = relativePath('src/main/scripts/events.csv')
member = relativePath('src/main/scripts/member.csv')
membership = relativePath('src/main/scripts/membership.csv')
}

//check the target is set
doFirst {
println "\nBulk import of $target\n"
}

main = 'org.yajug.users.bulkimport.BulkImport'
classpath = sourceSets.main.runtimeClasspath
args target
args ext[target]
debug false

}
bulk.dependsOn("bulk${target}")
}

最佳答案

How can I group all these calls into an other single task with the gradle's dependency model ?

你不能,因为任务(实例)在每次构建时最多执行一次。相反,要走的路是声明多个任务实例。您可以通过将任务声明放在一个循环中,将它放在一个方法中并多次调用它,或者通过编写一个任务类并多次实例化它来实现。然后,您将添加另一个依赖于所有 bulk 任务的任务。假设 bulk 任务之间的执行顺序无关紧要,就是这样。

通过添加一两个辅助方法,您可以围绕它创建一个漂亮的小 API,以提高可读性并允许在其他地方重用。

解决此问题的另一种方法是使用任务规则。您可以在 Gradle User Guide 中阅读有关任务规则的更多信息.

关于Gradle聚合任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14605252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com