Methods 什么';组织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..."

我目前正在将一些旧的大型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 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
    存在。
    在我看来,这应该不是一项任务
  • 方法应用于组织构建逻辑,并且用户不应看到该方法
使用前一种逻辑,当我的方法需要调用Gradle任务时,我会遇到问题(比如Java插件的JAR创建)

我知道这一点(方法中的任务也是如此),但是,看看这个例子:

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”)您最好执行任务,因为它们可以更好地扩展,更易于管理。如果你有很多代码,试着把它放进去,甚至做一个插件。而且,这个问题看起来是基于意见的。。。