Зависимости проекта Gradle

У меня есть 3 отдельных проекта Gradle - x зависит от y в зависимости от z.

x/settings.gradle

include ':y'
project(':y').projectDir = new File('../y')

x/build.gradle

apply plugin: 'java'

y/settings.gradle

include ':z'
project(':z').projectDir = new File('../z')

y/build.gradle

apply plugin: 'java'
dependencies {
    compile project(':z')
}

Когда я запускаю gradlew build в каталоге x, я получаю сообщение об ошибке

* Where:
Build file 'C:\Temp\idea\y\build.gradle' line: 4

* What went wrong:
A problem occurred evaluating project ':y'.
  Project with path ':z' could not be found in project ':y'.

Но запуск gradlew build в каталоге y прошел успешно.

Как настроить x и y, чтобы зависимости y не повлияли на x?


person Alexey    schedule 21.12.2017    source источник
comment
У вас не должно быть нескольких файлов settings.gradle в проекте.   -  person JB Nizet    schedule 21.12.2017
comment
Ну а есть другой способ создать такую ​​цепочку зависимостей?   -  person Alexey    schedule 21.12.2017
comment
Конечно. Уникальный файл settings.gradle определяет все проекты, включенные в сборку. Зависимости объявляются в каждом файле сборки проекта.   -  person JB Nizet    schedule 21.12.2017
comment
Как я могу определить путь проекта z в y/build.gradle вместо y/settings.gradle?   -  person Alexey    schedule 21.12.2017
comment
Вы читали руководство по Gradle о многопроектных сборках? Это объясняет все, включая структуру.   -  person JB Nizet    schedule 21.12.2017
comment
вам нужно иметь корневой проект, под которым у вас есть проекты x, y, z, тогда зависимость проекта будет разрешена.   -  person chenrui    schedule 22.12.2017


Ответы (1)


Это не то, как многопроектные сборки работают в Gradle.

Короче говоря, вы не можете иметь несколько settings.gradle, только один в корне родительского проекта.

В этом файле настроек вы определите различные модули:

include ':x', ':y', ':z'

Обратите внимание, что вышеприведенное неявно предполагает, что 3 проекта расположены в папках с именами x, y и Z как одноуровневые элементы файла settings.gradle.

Оболочка Gradle также должна быть определена на этом корневом уровне и нигде больше.

И без изменения файла build.gradle в каждом проекте вызов ./gradlew build в этой корневой папке должен дать то, что вы ожидаете.

Дополнительные сведения см. в документации Gradle по многопроектным сборкам.

person Louis Jacomet    schedule 22.12.2017