gradle任务生成已存在问题

gradle任务生成已存在问题,gradle,Gradle,我发现了错误 Cannot add task ':webserver:build' as a task with that name already exists. 奇怪的是,我的hello任务很好,但是我的build任务不好,是的,我正在尝试覆盖Java插件的build任务 主build.gradle文件: allprojects { apply plugin: 'java' apply plugin: 'eclipse' task hello << { ta

我发现了错误

Cannot add task ':webserver:build' as a task with that name already exists.
奇怪的是,我的
hello
任务很好,但是我的
build
任务不好,是的,我正在尝试覆盖Java插件的build任务

build.gradle
文件:

allprojects {
   apply plugin: 'java'
   apply plugin: 'eclipse'

   task hello << { task -> println "I'm $task.project.name" }
   task build << { task -> println "I'm building now" }
}

subprojects {

    hello << {println "- I depend on stserver"}

    build << { println "source sets=$sourceSets.main.java.srcDirs" }
}
sourceSets.main{
  java.srcDirs = ['app']
}

build << { println "source sets=$sourceSets.main.java.srcDirs" }

hello << {println "- Do something specific xxxx"}

这里的交易是什么,是覆盖
build
special还是什么?覆盖我自己的
hello
任务工作得很好,我认为覆盖
build
也会很简单?

您没有覆盖
hello
任务,您只是添加了更多的任务操作。您可以使用
任务foo(overwrite:true)
覆盖任务。我没有找到覆盖
构建任务的好理由;也许有更好的方法来实现你想要的

这里的交易是什么,覆盖构建是特殊的还是什么。覆盖我自己的hello任务工作得很好,我认为覆盖构建也同样简单

行为看起来不同的原因是
build
任务已经存在,而
hello
没有(并不是因为
build
是特殊的)

在gradle中,您不能这样做:

task hello << { print "hello" }
task hello << { print "hello again" }

task可能是你好,但现在,我只需要完成它……随着我对它的理解越来越深入,我肯定需要重温一些东西。@Peter谢谢你,真的帮了我很大的忙。当我们处理多个gradle脚本文件时,Overwirt非常有用。例如:假设A.gradle有一些任务,它用于(apply from:'A.gradle')B.gradle和C.gradle。现在有另一个gradle文件说D.gradle同时需要B和C特性。导入时,我们将面临中定义的所有任务的任务重复。我觉得对A.gradle中定义的任务来说,声明覆盖为true是正确的。或者应该有一些我不知道的其他解决方法。嘿,我试过了,但没有成功,但最后发现在另一个gradle文件中有另一个任务构建,我错过了…我愚蠢的错误。