gradle multi-project: заказы/зависимости

65
6

У меня есть многопроектная сборка, которая включает в себя множество подпроектов.

include ':common'
project( ':common' ).projectDir = new File( rootDir, 'android-common/common' )

include ':setup'
project( ':setup' ).projectDir = new File( rootDir, 'android-setup/setup' )
...

я хотел бы добавить порядок (или зависимости) между ними на уровне мастер-проекта. в приведенном выше примере, я хочу, чтобы common всегда строился до setup. кажется, что я хочу сделать что-то вроде получения ссылки на setup:compile (или что-то, что называется задачей сборки) и добавить дополнительную зависимость. что-то вроде,

tasks[':setup'].dependsOn += tasks[':common:install']

очевидно, что это не сработает. Это возможно?

EDIT: немного больше деталей. результат :common - установить артефакт maven, который затем используется :setup. поэтому зависимость между ними мягкая. однако в нашем типичном цикле dev мы все же хотим построить :common сначала.

спросил(а) 2021-01-19T23:41:13+03:00 9 месяцев назад
1
Решение
79

мне кажется, что вы хотите использовать зависимости проекта

project(':setup') {
dependencies {
compile project(':common')
}
}

EDIT: кажется, вы просто хотите объявить кросс-проектные зависимости задач в родительском build.gradle.

tasks.getByPath(":setup:compile").dependsOn(":common:install")

Обратите внимание, что это приведет к тому, что проект установки будет оценен/настроен в этой точке. Если по какой-либо причине это вызывает проблемы, возможно, вы захотите использовать прослушиватель

project("setup").afterEvaluate { setup -> setup.compile.dependsOn ":common:install }

Обратите внимание, что если вы хотите самостоятельно создать проект установки в этой структуре, вам придется использовать опцию командной строки -u.

ответил(а) 2021-01-19T23:41:13+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема