2012-06-22 25 views
17

vargradle görev inşa zaten hatasını alıyorum sorunu

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

garip şey benim hello görev gayet ama benim build görev değildir VE EVET, Java eklentinin inşa görevini geçersiz kılmak çalışıyorum.

Usta build.gradle dosyası:

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" } 
} 

Çocuğum web sunucusu build.gradle dosyası:

sourceSets.main{ 
    java.srcDirs = ['app'] 
} 

build << { println "source sets=$sourceSets.main.java.srcDirs" } 

hello << {println "- Do something specific xxxx"} 

Olay ne olduğunu özel build falan kıldı? Kendi hello görevimin üstesinden gelmek iyi çalıştı ve build'u geçersiz kılmak sadece basit olurdu?

cevap

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?

nedenidir (ve build özeldir çünkü).

gradle size bunu yapamaz:

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

Bu tanıdık hata ile başarısız olur: "Cannot add task ':hello' as a task with that name already exists.".

build görevi zaten mevcut olduğundan, ikinci bir task build << { ... } numarasına sahip olmak yasa dışıdır. Ancak, hello görevi için çalışacaktır, çünkü yok ve task hello << { ... } yasaldır, çünkü bu ilk hello görevidir.

Eğer değiştirirseniz sizin task build << { ... } sadece mevcut göreve daha fazla davranışı ekler build << { ... } ile, gayet "derlemek" olacaktır.

+0

heh, Bunu denedim ve işe yaramadı ama nihayet bir daha kaçırdığım başka bir not dosyasında başka bir görev oluşturdum. –

10

hello görevini geçersiz kılmıyorsunuz, sadece daha fazla görev eylemi ekliyorsunuz. Bir görevi task foo(overwrite: true) ile geçersiz kılabilirsiniz. build görevini geçersiz kılmak için iyi bir nedene rastlamadım; İstediğinizi elde etmek için muhtemelen daha iyi yollar vardır. build görev zaten var ve hello değil çünkü davranış farklı görünüyor

+0

Muhtemelen ama şimdilik bunu yapmam gerekiyor ... daha fazla anladığımdan, bazı şeyleri tekrar gözden geçirmem gerekecek. –

+0

@Peter Teşekkürler gerçekten yardımcı oldu. Birden çok gradle komut dosyasıyla uğraşırken Overwirte gerçekten yararlıdır. Örnek için: A.gradle'nin bir göreve sahip olduğunu farz edelim ve (B.gradle ve B.gradle) 'den yararlanın. Şimdi başka bir gradle dosyası var, D.gradle'in hem B hem de C özelliklerine ihtiyacı var. A'yı içe aktarırken tanımladığımız tüm görevler için görev çoğaltma ile karşılaşacağız. Ve A.gradle'de tanımlanan görevler için doğru yazmanın doğru olduğunu düşünüyorum. Ya da habersiz olduğum başka bir çözüm var. –

İlgili konular