Подтвердить что ты не робот

Gradle Настройка нескольких модулей

Недавно я начал использовать Gradle и заменил мои существующие проекты на Maven. В прошлом у меня было много проблем с обработкой многомодульных модулей с Maven. Gradle был прилив свежего воздуха при работе с многомодульными строками, но он еще не идеален.

У меня есть следующий макет папки для моих проектов:

-- Projects
---- EnterpriseApp1
------ EarProject
-------- build.gradle
------ EjbProject
-------- build.gradle
------ WarProject
-------- build.gradle
------ properties.gradle
------ build.gradle
---- CommonLib
------ build.gradle
---- ClientApplication
------ build.gradle

Проблема, с которой я столкнулась, заключается в том, что "EnterpriseApp1" и "ClientApplication" зависят от проекта CommonLib. Я не знаю, как настроить файл сборки EnterpriseApp1 для использования проекта CommonLib в качестве зависимости для "EjbProject". Я очень приблизился к тому, чтобы это работало, но пока не совсем работало. У меня был успех, скопировав папку CommonLib внутри "EnterpriseApp1" , но это не долгосрочное решение.

Здесь мой текущий файл properties.gradle в "EnterpriseApp1" :

include "EarProject", "EjbProject", "WarProject"
includeFlat "CommonLib"

В соответствии с документацией Gradle команда "includeFlat" в файле "settings.gradle" будет включать проекты в том же ключе, что и папка, где находится файл "settings.gradle" (желаемое поведение).

Файл EnterpriseApp1/build.gradle:

subprojects {
   apply plugin: 'java'

   sourceCompatibility  = 1.6
   group = 'org.example'
   version = '1.0-SNAPSHOT'

   repositories {
      mavenCentral()
      ...
   }

   dependencies {

   }    
}

EnterpriseApp1/EjbProject/build.gradle:

apply plugin: 'java'

sourceCompatibility  = 1.6

repositories {
   mavenCentral()
   ...
}

dependencies {
   compile project(':CommonLib')

   compile group: 'org.restlet.jee', name: 'org.restlet', version: '2.0.11'
   compile group: 'ma.glasnost.orika', name: 'orika-core', version: '1.0'
   ...
   compile group: 'javax.jmdns', name: 'jmdns', version: '3.4.1'
}

Когда я выполняю "gradle чистая сборка" из папки EnterpriseApp1, все зависимости загружаются, как ожидалось, и проекты начинают компилироваться (включая проект CommonLib), но проект EjbProject не работает во время сборки из-за того, что он Отсутствует ссылка на CommonLib. Gradle недостаточно умен (или я совершенно не знаю); для настройки моего EjbProject использовать Jar, сгенерированный с этапа сборки проекта CommonLib.

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

Спасибо!

4b9b3361

Ответ 1

Макет каталога, который вы выбрали, уже намекает на хорошее решение. Я предлагаю иметь три отдельных сборки: EnterpriseApp1, CommonLib и ClientApplication. Я бы опубликовал CommonLib в репозитории Maven или Ivy, чтобы другие две сборки могли его использовать. Для локального развития вы можете опубликовать CommonLib в локальном репозитории Maven (самый простой) или в репозитории Ivy на основе файлов.