2014-10-22 16 views
26

Yapılandırmaya çalıştığım bir MultiModule taslak projem var. Alt projelere ilişkin adım görevi yürütme

Root 
    projA 
    projB 
    other 
     projC 
     projD 
     projE 
     ... 

Yapacak isterler ister başka dizindeki projelerin her birinde buildJar görevi yürütecek kök build.gradle bir görevi olması.

ben

configure(subprojects.findAll {it.name != 'tropicalFish'}) { 
    task hello << { task -> println "$task.project.name"} 
} 

yapabileceğini biliyorum Ama bu da projA ve projB, sadece c, d, e görevi çalıştırmak istediğiniz alacak ... beni en iyi yolu bildirin Başar bunu.

cevap

32

Bunlardan hangilerinin peşinde olduklarından emin değilsiniz, ancak üslerinizi kapsamalıdır. görevleri çağrılması

1. doğrudan

sadece

gradle :other/projC:hello :other/projD:hello 

Ben bu test çağırmak mümkün olmalıdır:

# Root/build.gradle 
allprojects { 
    task hello << { task -> println "$task.project.name" } 
} 

ve

# Root/settings.gradle 
include 'projA' 
include 'projB' 
include 'other/projC' 
include 'other/projD' 

2. Yalnızca alt projelerde görev oluşturma

Yoksa yalnızca diğer/* projelerde oluşturulan görevi mi istiyorsunuz?

Eğer ikincisi, ardından aşağıdaki çalışır:

# Root/build.gradle 
allprojects { 
    if (project.name.startsWith("other/")) { 
     task hello << { task -> println "$task.project.name" } 
    } 
} 

ve daha sonra çağrılabilir:

$ gradle hello 
:other/projC:hello 
other/projC 
:other/projD:hello 
other/projD 

3. alt proje sadece

görevleri çalıştıran bir görev oluşturma

Bu sürüm, sorgunuzun okunmasıyla eşleşiyor. Bu, alt projelerde (buildJar) zaten bir görev olduğu anlamına geliyor ve bir görev oluşturuluyor. Sadece alt projeleri arayacak kök diğer/*: buildJar

allprojects { 
    task buildJar << { task -> println "$task.project.name" } 
    if (project.name.startsWith("other/")) { 
     task runBuildJar(dependsOn: buildJar) {} 
    } 
} 

Bu bir görev her projede "buildJar" ve "runBuildJar" oluşturur diğer/* projelerde Arayabileceğin sadece, bu yüzden:

$ gradle runBuildJar 
:other/projC:buildJar 
other/projC 
:other/projC:runBuildJar 
:other/projD:buildJar 
other/projD 
:other/projD:runBuildJar 

sorunuz birçok yol okunabilir, bu da onlara aynı sorun var çünkü bugün bu soruyu bulunan tüm :)

+0

Cevabınız için teşekkürler. Seçeneklerin hiçbiri ihtiyaçlarıma uygun değildi: 1. Tüm alt projelerin listesini bilmemiz gerekiyor. 2 + 3. Build betiğinin değiştirilmesi gerekiyor. Sonunda, bunu başarmak için başka bir yol buldum ve yeni bir cevap olarak ekledim. – Marwin

+0

@Marwin: Cevabınız nerede? Ilgilenirdi. – frhd

+0

@frhd Aşağıdaki cevaba bakınız "gradle -p other hello" –

22

kapsar umuyoruz. Mark tarafından belirtilen tüm yollar kullanılabilir, ancak hepsinin bazı eksileri vardır. Bu yüzden bir seçenek daha ekliyorum:

4.Mevcut projeyi

gradle -p other hello 

Bu daha sonra "Mevcut projeyi" geçer ve geçiş mevcut proje kapsamında hello adında tüm görevleri çalıştırır.

İlgili konular