Gradle: настроить подпроект (модуль) из родительского скрипта сборки

radistao спросил: 31 июля 2018 в 09:56 в: gradle

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

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. Но я сделал это уже в родительском config выше, и мне бы хотелось, чтобы подпроекты выбирали родительскую конфигурацию там, где это возможно.

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


2 ответа

M.Ricciuti ответил: 31 июля 2018 в 10:12

Прежде всего: у вас не должно быть скриптов обертки 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, первый подход не работает, потому что вам нужно указать путь к сценарию оболочки, если вы не находитесь в корне проекта. Например, если вы находитесь в каталоге подпроекта веб-сервиса, вам нужно будет запустить ../../gradlew build.

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

radistao ответил: 31 июля 2018 в 02:29

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

https://docs.gradle. орг / ток / UserGuide / build_lifecycle.html # суб: project_locations

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