根据作为插件属性的条件配置自定义gradle插件任务

根据作为插件属性的条件配置自定义gradle插件任务,gradle,Gradle,我正在编写一个包含复制任务的自定义插件。该任务应该从maven存储库中获取wsdl文件或包含wsdl和XSD的zip。对于zip文件,它将使用ziptree来扩展文件 完成后,另一个任务将使用wsimport从这些文件创建客户机jar 我目前的尝试是使用插件布尔属性来区分。以下代码是我试图实现的目标: void addTasks(Project project) { project.task('downloadWSDL', type: Copy) { if (project.wsim

我正在编写一个包含复制任务的自定义插件。该任务应该从maven存储库中获取wsdl文件或包含wsdl和XSD的zip。对于zip文件,它将使用ziptree来扩展文件

完成后,另一个任务将使用wsimport从这些文件创建客户机jar

我目前的尝试是使用插件布尔属性来区分。以下代码是我试图实现的目标:

void addTasks(Project project) {
  project.task('downloadWSDL', type: Copy) {
    if (project.wsimport.zipped) {
      from { project.configurations.wsdl.collect { project.zipTree(it) }}
      into { project.wsimport.wsdlDir }
    } else {
      from { project.configurations.wsdl }
      into { project.wsimport.wsdlDir }
    }
  }
}
这里的问题是project.wsimport.zipped没有在配置阶段设置为false。我曾尝试将其放入闭包中,但它似乎仍然执行压缩路径,即使属性设置为false

如何根据条件配置这样的任务

检查工作解决方案是否是最新的时,工作解决方案是否会按预期运行

我曾认为另一种方法可能是使用两个不同的任务并动态修改依赖类的dependsOn,但我怀疑它会遇到类似的问题


谢谢。

这是Project.afterEvaluate可以提供帮助的。谢谢,我刚刚在一个相关问题中找到了它,现在就尝试一下……afterEvaluate在任务中起到了很好的作用,尽管它会带来新的挑战。由于任务现在是在评估后添加的,如何配置另一个任务以依赖它?我尝试过在afterEvaluated的内部和外部进行build.dependsOn下载WSDL之类的工作,但没有任何效果。也许我只是没有正确地提到任务。