20

エラーが発生します

Cannot add task ':webserver:build' as a task with that name already exists.

奇妙なことに、私のhelloタスクは問題ありませんが、私のbuildタスクはANDYESではありません。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 は既に存在するため、2 番目のtask build << { ... }. ただし、helloタスクは存在しないため機能し、タスクtask hello << { ... }の最初の宣言であるため合法helloです。

task build << { ... }yourをに置き換えると、既存のbuild << { ... }タスクにさらに動作を追加するだけで、正常に「コンパイル」されます。

于 2012-06-22T15:14:36.297 に答える