20

我收到错误

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也一样简单?

4

2 回答 2

11

您没有覆盖hello任务,您只是添加更多任务操作。您可以使用 覆盖任务task foo(overwrite: true)。我还没有找到重写build任务的充分理由;可能有更好的方法来实现你想要的。

于 2012-06-22T14:32:42.120 回答
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.".

由于buildtask 已经存在,因此拥有 second 是非法的task build << { ... }。但是,它适用于hello任务,因为它不存在,因此task hello << { ... }是合法的,因为它是hello任务的第一个声明。

如果您替换您的task build << { ... }with ,这只是为现有build << { ... }任务添加更多行为,它将“编译”得很好。

于 2012-06-22T15:14:36.297 回答