2012-06-22 6 views
17

が存在する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をオーバーライドするのが簡単だと思いましたか?

答えて

9

What is the deal here, overriding build is special or something. Overriding my own hello task worked fine and I thought overriding build would be just as simple?

理由がある(とbuildが特別ではないので)。 "Cannot add task ':hello' as a task with that name already exists."

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

これはおなじみのエラーで失敗します:あなたがこれを行うことはできませんのGradleで

buildタスクが既に存在するため、2番目のタスクを持つことは違法です。task build << { ... }しかし、helloタスクのためにそれは存在しないので、task hello << { ... }は有効です。それはhelloタスクの最初の宣言です。

あなただけ既存タスクに多くの行動を追加した、build << { ... }であなたのtask build << { ... }を交換した場合、それが正常に「コンパイル」します。

+0

heh、私はそれを試して、それは動作しませんでしたが、最終的に私が逃したまだ別のgradleファイルに別のタスクビルドがあった...私の愚かな間違い。 –

10

helloタスクをオーバーライドしていないため、タスクアクションを追加するだけです。タスクをtask foo(overwrite: true)で上書きすることができます。 buildタスクを上書きする正当な理由はありません。おそらくあなたが望むものを達成するためのよりよい方法があります。 buildタスクがすでに存在しているとhelloがないので、動作が異なるを思わ

+0

おそらく今のところ、私はそれを完了する必要があります...もっと理解しているので、私は確かにいくつかのものを再訪する必要があります。 –

+0

@Peterありがとうございました。 Overwirteは複数のgradleスクリプトファイルを扱うときには本当に便利です。インスタンスの場合:A.gradleにいくつかのタスクがあり、それが(A.gradleから適用されます)B.gradleとC.gradleで使用されているとしましょう。現在、D.gradleにはBとCの両方の機能が必要であると言う別のgradleファイルがあります。 Aに定義されているすべてのタスクのタスク重複が発生すると、それをインポートします。そして、A.gradleで定義されているタスクが正しく実行されていると思われる場合は、上書きすると宣言します。または、私が気づいていない他の回避策が存在するはずです。 –

関連する問題