Подпроекты Gradle не будут компилироваться с зависимостью от другого подпроекта

У меня есть многопроектный проект Gradle со следующей структурой.

Project A: The top level project that all sub projects reside in.
  SubProject B: 
  SubProject C:
  SubProject D:
  SubProject E:
  SubProject Shared: Every 'SubProject' has a dependency to this project "compile project(':Shared')"

Все работает правильно при запуске задач Gradle из верхнего уровня «Проект А».

Однако, когда я пытаюсь запустить отдельную задачу в подпроекте, таком как «Подпроект C», я получаю следующую ошибку.

ОШИБКА: сборка не удалась с исключением

Что пошло не так:

Произошла ошибка при оценке корневого проекта "SubProject C".

Не удалось найти проект с путем «: Shared» в корневом проекте «SubProject C».

Я думаю, что вижу проблему здесь, Gradle думает, что мой подпроект является корневым проектом? Однако я не знаю, как это решить.

Мой файл settings.gradle верхнего уровня выглядит так

rootProject.name = 'Project A'

include 'SubProject B'
include 'SubProject C'
include 'SubProject D'
include 'SubProject E'
include 'SubProject Shared'

Это мой файл build.gradle для «Подпроекта C».

dependencies {
    compile project(':Shared')
}

Бонусный вопрос ... Нужен ли подпроектам файл settings.gradle с «rootProject.name», установленным в качестве имени подпроекта?


person hitch.united    schedule 08.08.2016    source источник
comment
как вы выполняете отдельные задачи в своем подпроекте? Правильный способ сделать это - gradle :project:task   -  person Ravi Vasamsetty    schedule 08.08.2016
comment
@RaviVasamsetty Прямо сейчас я использую плагин eclipse gradle для их запуска.   -  person hitch.united    schedule 09.08.2016
comment
Я использую плагин buildship gradle, и у него нет проблем с выполнением задачи подпроекта. Какой плагин вы используете?   -  person Ravi Vasamsetty    schedule 09.08.2016


Ответы (2)


Я думаю, что проблема связана с вашим файлом settings.gradle.

Замените файл settings.gradle приведенным ниже кодом.

rootProject.name = 'Project A'

include 'SubProject B',':SubProject C',':SubProject D',':SubProject E'
include ':SubProject Shared'

Попробуйте запустить скрипт сборки SubProjectC. Надеюсь, это сработает.

И ответьте на второй вопрос.

We don't need seperate settings.gradle for each subprojects.
person Jince Martin    schedule 09.08.2016
comment
У меня это не сработало при использовании Gradle 5.3 :-( Кстати docs.gradle.org/ current/userguide/multi_project_builds.html не использует include ":..."?! - person Jakub Holý; 28.05.2019

В моем случае проблема заключалась в том, что мой подпроект имел settings.gradle с

rootProject.name = 'MySubProject'

удаление файла исправило это. (Кажется, у вас вообще не должно быть файла, недостаточно удалить свойство.)

person Jakub Holý    schedule 28.05.2019