我收到错误
Cannot add task ':webserver:build' as a task with that name already exists.
奇怪的是我的hello
任务很好,但我的build
任务不是和是,我试图覆盖Java插件的构建任务。
掌握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" }
}
我的孩子网络服务器build.gradle
文件:
sourceSets.main{
java.srcDirs = ['app']
}
build << { println "source sets=$sourceSets.main.java.srcDirs" }
hello << {println "- Do something specific xxxx"}
这里的交易是什么,是覆盖build
特殊还是什么?覆盖我自己的hello
任务工作正常,我认为重写build
会一样简单吗?
答案 0 :(得分:10)
您没有覆盖hello
任务,您只是添加了更多任务操作。您可以使用task foo(overwrite: true)
覆盖任务。我没有找到覆盖build
任务的充分理由;可能有更好的方法来实现你想要的。
答案 1 :(得分:9)
这里的交易是什么,覆盖构建是特殊的或者其他什么。覆盖我自己的hello任务工作得很好,我认为覆盖构建会一样简单吗?
行为似乎不同的原因是因为build
任务已经存在且hello
没有(而不是因为build
特殊)。
在gradle中你不能这样做:
task hello << { print "hello" }
task hello << { print "hello again" }
这会因熟悉的错误而失败:"Cannot add task ':hello' as a task with that name already exists."
。
由于build
任务已经存在,因此拥有第二个task build << { ... }
是违法的。但是,它适用于hello
任务,因为它不存在,因此task hello << { ... }
是合法的,因为它是hello
任务的第一个声明。
如果您将task build << { ... }
替换为build << { ... }
,这只会为现有任务添加更多行为,则会“编译”正常。