2015-03-31 4 views
4

У меня есть многопроектная сборка. Подпроекты находятся в древовидной структуре (не плоской). В файле root build.gradle у меня есть метод, который делает некоторые общие вещи для фазы компиляции.Получить название проекта задачи в граде

Я хотел бы иметь отдельный целевой каталог для каждого подпроекта. Поэтому, когда я собираю весь проект, у меня будут собственные артефакты для каждого подпроекта. Метод, о котором я упоминал выше, выполняет компиляцию, поэтому ему нужно знать, какой проект он компилирует.

Если я использую команду «gradle: subproject1: subsubproject1: compile», тогда имя project.name все еще содержит имя корневого проекта. Но мне нужно во время выполнения знать проект задачи, который вызвал метод.

Вопросов:

  1. Это хорошая идея вообще иметь отдельные цели для подпроектов?
  2. Как я могу понять проект задачи, который вызвал метод внутри этого метода?
+0

Зачем вам нужно выполнять конкретные задачи модуля/подпроекта? Если вы запустили компиляцию из корня, он должен построить все подпроекты. – mushfek0001

+0

Да, но я также хочу иметь возможность компилировать только подпроекты (с зависимостями), чтобы ускорить работу до – mrzodiak

ответ

6

Если задание определено в подпроекте, вы можете просто использовать project.name, чтобы получить название проекта, в котором выполняется задача. Вы можете попробовать его, например, добавив следующий код build.gradle находится на корневом проекте:

allprojects { 
    task printProjName << { 
     println ">> " + project.name 
    } 
} 

Затем, выполняя задачу printProjName приведет к выходу аналогичного приведенному ниже:

:printProjName 
>> Gradle 
:projA:printProjName 
>> projA 
:projB:printProjName 
>> projB 
:projA:projA1:printProjName 
>> projA1 
:projA:projA2:printProjName 
>> projA2 
+0

Thx. Но метод определен в корневом проекте, и если я пытаюсь выполнить println project.name из метода, он возвращает имя корневого проекта. Я предполагаю, что единственный выход - передать project.name в качестве аргумента методу – mrzodiak

+0

Вправо - вы можете передать объект проекта функции, а затем получите доступ ко всем свойствам проекта. –

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