gradle任务构建已存在问题

时间:2012-06-22 13:36:44

标签: gradle

我收到错误

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

2 个答案:

答案 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 << { ... },这只会为现有任务添加更多行为,则会“编译”正常。