Настройка многомодульного проекта 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 из-за того, что в нем отсутствует ссылка на jar-файл CommonLib, Gradle не достаточно умен (или я совершенно невежественен;)), чтобы настроить мой EjbProject для использования Jar, созданного на этапе сборки проекта CommonLib.
Я прошу прощения за долгую и сложную настройку. Я работал над попыткой выяснить это в течение некоторого времени, но идеи почти закончились. Я был бы очень признателен за любую помощь для сообщества.
Спасибо!
1 ответ
Макет каталога, который вы выбрали, уже намекает на хорошее решение. Я предлагаю иметь три отдельных билда: EnterpriseApp1
, CommonLib
, а также ClientApplication
, Я бы опубликовал CommonLib
в репозиторий Maven или Ivy, так что две другие сборки могут использовать его оттуда. Для местного развития вы можете опубликовать CommonLib
в локальный репозиторий Maven (самый простой) или репозиторий Ivy на основе файлов.