2015-08-10 2 views
0

Gradle несколько индивидуальных зависимых проектов Java. С плоской структурой папок все на одинаковых уровнях.Gradle - много проектов - структура плоских каталогов все на одном уровне

Я пытаюсь создать многоградусные Java-проекты, подобные этому.

  • Child1 - Зависит от ничего (слой данных)
  • Child2 - зависит только от ребенка1 (Бизнес-слой)
  • Родитель - зависит только от ребенка2 (Service Layer)

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

Child2 - settings.gradle

include ':Child1' 
project(':Child1').projectDir = new File(settingsDir, "../Child1"); 

Child2 - build.gradle

dependencies { 
    compile project(':Child1') 
} 

Родитель - settings.gradle

include ':Child1', ':Child2' 
project(':Child1').projectDir = new File(settingsDir, "../Child1"); 
project(':Child2').projectDir = new File(settingsDir, "../Child2"); 

Примечание: - Интересно, почему мы должны определять детальные данные здесь? Потому что Родитель просто нуждается в зависимости от Child2. Если я не настроен, как описано выше, он не работает.

Родитель - build.gradle

dependencies { 
    compile project(':Child2') 
} 

enter image description here

ответ

1

В нескольких проекте модуля каталогов дочернего проекта являются вложенные папки в родительской папке. Это согласуется. Если вы выравниваете свои папки в этом соглашении, то меньше информации, которая должна быть включена в ваши файлы сборки.

Ниже приведен пример из this question.

myproject 
    | 
|-- ear 
    |-- build.gradle 
    |-- ... 
|-- core 
    |-- build.gradle 
    |-- ... 
|-- web 
    |-- build.gradle 
    |-- include core project as dependency for this project 
    |-- ... 
|-- settings.gradle // has include "ear", "core", "web" 

Поскольку ваша структура не соответствует этому соглашению, вам необходимо четко указать местоположение детей. Связь между родительским и child1 является прямой, в отличие от отношения библиотеки зависимостей и других зависимостей, которые могут иметь эта библиотека. Если child1 был только зависимостью child2, а не дочерним элементом родителя, тогда вам не пришлось бы указывать папку chil1. Но это так: 1) child1 является дочерним по отношению к родительскому элементу и 2) вы используете стандартный макет каталога для мультимодуля. поэтому теперь вы должны сказать Gradle, где child1 находится в скрипте сборки родителя.

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