2014-10-22 3 views
26

У меня есть проект градиента MultiModule, который я пытаюсь настроить.Выполнение задачи градации на подпроектах

Root 
    projA 
    projB 
    other 
     projC 
     projD 
     projE 
     ... 

Хотите, я хочу, чтобы иметь возможность сделать это есть задача в корневом build.gradle, который будет выполнять задачу buildJar в каждом из проектов, в другом каталоге.

Я знаю, что могу сделать

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

Но это будет также получить projA и projB, я хочу только выполнить задачу на C, D, E ... Пожалуйста, дайте мне знать, лучший путь к добиться этого.

ответ

32

Не совсем уверен, какой из них вы после, но они должны покрывать ваши базы.

1. Вызов задачи непосредственно

Вы просто должны быть в состоянии назвать

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

Я испытал это с:

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

и

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

2. Только создание задач в подпроектах

Или вам нужна только задача, созданная по другим проектам/*?

Если последнее, то следующие работы:

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

и тогда можно назвать с:

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

3. Создание задачи, которая работает задачи в подпроектов только

Эта версия соответствует моему чтению вашего вопроса, означающего, что уже есть задача на подпроектах (buildJar) и создание задачи в корень, который будет вызывать только подпроекты другой/*: buildJar

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

Это создает задачу «buildJar» по каждому проекту, и «runBuildJar» на других/* проектов только, так что вы можете позвонить:

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

Ваш вопрос можно прочитать много способов, надеюсь, что это охватывает их все :)

+0

Спасибо за ответ. Ни один из вариантов не отвечал моим потребностям: 1. Нам нужно знать список всех подпроектов. 2 + 3. Сценарий сборки необходимо изменить. Наконец, я нашел другой способ добиться этого и добавил его в качестве нового ответа. – Marwin

+0

@Marwin: Где твой ответ? Было бы интересно. – frhd

+0

@frhd См. Ответ ниже мой «gradle -p другой привет» –

22

Я нашел этот вопрос сегодня, потому что у меня такая же проблема. Все способы, упомянутые Марк, могут быть использованы, но все они имеют некоторые минусы. Поэтому я добавляю еще один вариант:

4.Переключение текущего проекта

gradle -p other hello 

Это переключает «текущий проект», а затем выполняет все задачи, названные hello в рамках текущего проекта.

Смежные вопросы