2016-12-25 3 views
1

У меня есть 3 проекта Java, расположенных рядом друг с другом в структуре папок: Proj1, Proj2 и Proj3. Proj1 зависит от Proj2 и зависит от модели Proj3.Gradle не может найти проект в цепочке зависимостей

Вот их gradle.settings файлы:

rootProject.name = 'Proj3' 

rootProject.name = 'Proj2' 

include ':Proj3' 
project(':Proj3').projectDir = new File(settingsDir, '../Proj3') 

rootProject.name = 'Proj1' 

include ':Proj2' 
project(':Proj2').projectDir = new File(settingsDir, '../Proj2') 

и их gradle.build файлы:

Для 2

apply plugin: 'java' 

dependencies { 
    compile project(':Proj3') 
} 

Для 1

apply plugin: 'java' 

dependencies { 
    compile project(':Proj2') 
} 

2-я и 3-проекты построены устраивало Gradle, но когда я пытаюсь построить 1-ый он жалуется, что

Возникла проблема оценки проекта «: proj2: ». Проект с пустым ': Proj3' не найден в проекте ': Proj2'.

и указывает на линию compile project(':Proj3') (в сборке Proj2). Содержимое стека начинается с

org.gradle.tooling.BuildException: Не удалось получить модель типа «EclipseProject», используя распределение Gradle 'https://services.gradle.org/distributions/gradle-3.1-bin.zip.

Не знаю, почему 2-й проект может найти 3-й штраф при его построении и внезапно не при создании 1-го. Почему первый вопрос о том, как второй ищет третий, после того, как он уже включен в папку «Project и External Dependencies».

Как это сделать?

ответ

0

Думаю, вы устроили неправильную конфигурацию проекта. У вас может быть только один файл settings.gradle для одного проекта с несколькими модулями, и этот единственный файл должен включать все модули.

Так что структура может быть что-то вроде этого:

RootProject/ 
    build.gradle 
    settings.gradle 
    Proj1/ 
    build.gradle 
    Proj2/ 
    build.gradle 
    Proj3/ 
    build.gradle 

И должен settings.gradle содержит по крайней мере следующее:

include 'Proj1', 'Proj2', 'Proj3' 

В этом случае, кажется, вам не нужно иметь некоторые дополнительные для изменения имени модуля или его каталога. Вы можете прочитать об этом в official user guide.

+0

Спасибо, но я не хочу, чтобы эти проекты были под одним, поскольку proj2 и 3 - это утилита/библиотеки и будут использоваться в других проектах. Что бы вы сделали, если proj3 понадобился бы за пределами rootproject? – Mark

+0

Затем вы должны опубликовать его артефакт в каком-то локальном репозитории и использовать его так же, как и другие зависимости – Stanislav

+0

Это будет работать. Как это объяснить в руководстве пользователя? Или вы можете продемонстрировать? – Mark

0

Я нашел, как это сделать, не публикуя ничего или не меняя структуру каталогов.

Проект 3 не нуждается в settings.gradle или его зависимостях build.gradle.

Проект 2 Потребности settings.gradle:

include ':Proj3' 
project(':Proj3').projectDir = new File(settingsDir, '../Proj3') 

и build,gradle:

dependencies { 
    compile project(':Proj3') 
} 

проекта 1 Потребности settings.gradle:

include ':Proj3', ':Proj2' 
project(':Proj3').projectDir = new File(settingsDir, '../Proj3') 
project(':Proj2').projectDir = new File(settingsDir, '../Proj2') 

и build,gradle:

dependencies { 
    compile project(':Proj2') 
} 

И это ключ! Проект 1, но только в зависимости от Проекта 2, должен включать и указывать проект 3 также в его настройках. Тогда все работает нормально.

Смежные вопросы