Gradle: настройка подпроекта (модуля) из родительского сценария сборки - PullRequest
0 голосов
/ 24 августа 2018

Я разбил свой проект на модули / подпроекты, следуя этому руководству:

https://docs.gradle.org/current/userguide/multi_project_builds.html

В основном сценарии build.gradle я применяю конфигурацию для подпроектов:

subprojects {
  repositories {
    mavenCentral()
  }
}

И это прекрасно работает, если я запускаю сборку подпроекта из корневого каталога сборки:

mainProject$ ./gradlew clean :common:build 

(успешно строит :common модуль)

НО я хочучтобы иметь возможность собрать модуль :common, находящийся в каталоге common:

mainProject$ cd common
common$ ./gradlew clean build 

Сбой, если репозитории не настроены явно в файле common/build.gradle.Но я сделал это уже в родительской конфигурации выше, и мне бы хотелось, чтобы родительская конфигурация для выбора подпроектов была возможной.

Итак, горячая конфигурация родительского проекта и подпроектов, поэтому при запуске сборки подпроектаиз каталога подпроекта он также учитывает родительскую конфигурацию (и не только конфигурацию репозитория, но также некоторые константы, зависимости и т. д.).

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Проблема была в дочернем settings.gradle: у подпроектов не должно быть этого файла, иначе gradle считает текущий каталог и корневой проект!

https://docs.gradle.org/current/userguide/build_lifecycle.html#sub:project_locations

https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization

0 голосов
/ 24 августа 2018

Прежде всего: у вас не должно быть скриптов обертки gradle, установленных в каталогах каждого подпроекта, но вместо этого следует хранить только одну обертку gradle, установленную в корневом каталоге проекта. Затем, если вы хотите вызвать сборку из каталогов подпроектов, вам придется ссылаться на скрипт gradlew из родительских каталогов: это объясняется в одной заметке в документации по Wrapper: https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:using_wrapper

Существует также ссылка на это на другой странице официального документа: https://docs.gradle.org/current/userguide/intro_multi_project_builds.html#sec:executing_a_multiproject_build

Последнее, на что нужно обратить внимание. Когда вы используете оболочку Gradle, первый подход не работает, потому что вам нужно указать путь к сценарию оболочки, если вы не в корне проекта. Например, если вы находитесь в каталоге подпроекта webservice, вам придется запустить ../../gradlew build.

При выполнении сборки из каталога подпроекта Gradle автоматически выполнит поиск конфигурации корневого проекта, как вы и ожидали: это делается на этапе инициализации (см. Здесь: https://docs.gradle.org/current/userguide/build_lifecycle.html#sec:initialization)

...