Methods 什么';组织Gradle构建逻辑的任务或方法之间的最佳选择是什么?
我目前正在将一些旧的大型Maven 1脚本迁移到Gradle。 因此,我需要将旧的Maven 1/Ant及其目标逻辑改编为Gradle 在阅读了Gradle用户指南以及一些关于Gradle任务和方法的文章之后,我对如何编写脚本感到非常困惑 官方解释说,梯度任务:Methods 什么';组织Gradle构建逻辑的任务或方法之间的最佳选择是什么?,methods,gradle,build,logic,task,Methods,Gradle,Build,Logic,Task,我目前正在将一些旧的大型Maven 1脚本迁移到Gradle。 因此,我需要将旧的Maven 1/Ant及其目标逻辑改编为Gradle 在阅读了Gradle用户指南以及一些关于Gradle任务和方法的文章之后,我对如何编写脚本感到非常困惑 官方解释说,梯度任务: task dependentTask << { println "now that 'independentTask' is done, I can continue to do complex things..."
task dependentTask << {
println "now that 'independentTask' is done, I can continue to do complex things..."
}
task independentTask << {
// initialization stuff
println "doing a lot of initialization"
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart1 << {
println "doing really complex things"
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart2 << {
println "doing other really complex things"
}
// we declare all tasks relationships separately
dependenTask.dependsOn doComplexThingsThatTheUserShouldNeverDoHimselfPart2
doComplexThingsThatTheUserShouldNeverDoHimselfPart2 dependsOn doComplexThingsThatTheUserShouldNeverDoHimselfPart1, jar
doComplexThingsThatTheUserShouldNeverDoHimselfPart1 dependsOn independentTask
表示构建执行的一些原子工作
在中,还解释了我们可以使用方法来组织构建逻辑
所以,我的问题是:使用它们的正确方法是什么?
我正在创建一个构建脚本,因此,在我看来:
task dependentTask << {
println "now that 'independentTask' is done, I can continue to do complex things..."
}
task independentTask << {
// initialization stuff
println "doing a lot of initialization"
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart1 << {
println "doing really complex things"
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart2 << {
println "doing other really complex things"
}
// we declare all tasks relationships separately
dependenTask.dependsOn doComplexThingsThatTheUserShouldNeverDoHimselfPart2
doComplexThingsThatTheUserShouldNeverDoHimselfPart2 dependsOn doComplexThingsThatTheUserShouldNeverDoHimselfPart1, jar
doComplexThingsThatTheUserShouldNeverDoHimselfPart1 dependsOn independentTask
- 任务只能是允许用户通过命令行查看的任务。
例如,
对我来说是不正确的,因为用户甚至不应该知道gradle doSomeInternalTechnicalWork
存在。doSomeInternalTechnicalWork
在我看来,这应该不是一项任务 - 方法应用于组织构建逻辑,并且用户不应看到该方法
task independentTask << {
// initialization stuff
println "doing a lot of initialization"
// using methods to organize build logic, good or not?
doComplexThingsThatTheUserShouldNeverDoHimself()
}
task dependentTask(dependsOn: 'independentTask') << {
println "now that 'independentTask' is done, I can continue to do complex things..."
}
void doComplexThingsThatTheUserShouldNeverDoHimself() {
println "doing really complex things"
// I really need to create my JAR here and not somewhere else
// And I know it's not a good thing to directly call the Action.execute
jar.execute()
println "doing other really complex things"
}
task independent task经过大量搜索后,我得出结论,当您需要从另一个任务调用任务时,您别无选择,只能依赖任务关系(dependsOn
,必须在之后运行,由
完成)
这意味着方法不能像在Java、Groovy&Co中用于构造程序那样用于组织构建逻辑
因此,您无法阻止用户查看(并使用)某些内部任务,这些任务通常只应作为依赖项由其他任务使用
因此,前构建脚本的“渐变正确”版本将是:
task dependentTask(dependsOn: 'doComplexThingsThatTheUserShouldNeverDoHimselfPart2') << {
println "now that 'independentTask' is done, I can continue to do complex things..."
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart2(dependsOn: ['doComplexThingsThatTheUserShouldNeverDoHimselfPart1', 'jar']) << {
println "doing other really complex things"
}
task doComplexThingsThatTheUserShouldNeverDoHimselfPart1(dependsOn: 'independentTask') << {
println "doing really complex things"
}
task independentTask << {
// initialization stuff
println "doing a lot of initialization"
}
task dependentTask(dependsOn:“doccomplexingthingstheusershouldnowerdohimself-part2”)您最好执行任务,因为它们可以更好地扩展,更易于管理。如果你有很多代码,试着把它放进去,甚至做一个插件。而且,这个问题看起来是基于意见的。。。