Описан способ организации разработки, когда один из модулей (library) используется в нескольких проектах (application1, application2, ... applicationN). Чаще, и возможно проще, переиспольуемый модуль разрабатывается отдельно и затем подключается как зависимость через репозиторий maven. При изменении library его maven версия получает новый идентификатор и это изменение должно быть учтено в целевых проектах. Заготовка проекта: https://github.com/cherepakhin/multi-module.
В проекте два модуля Application и Library.
settings.gradle всего проекта:
rootProject.name = 'multi-module' include 'library' include 'application'
В Idea выглядит так:
Log сборки:
multi_module$ ./gradlew build Module Application. On JavaCompile. Executing TASK: compileJava ---------------- Module Application. On JavaCompile. Executing TASK: compileTestJava ---------------- Module Library. On JavaCompile. Executing TASK: compileJava ---------------- Module Library. On JavaCompile. Executing TASK: compileTestJava ---------------- Module Application. On Test. Executing TASK: test ---------------- Module Library. On Test. Executing TASK: test ---------------- BUILD SUCCESSFUL in 4s
При сборке, сначала все модули компилируются (...On JavaCompile...) в след. порядке:
Module Application:
- compile Application MAIN
- compile Application TEST
Module Library:
- compile Library MAIN
- compile Library TEST
Затем выполняются тесты (On Test) (т.к. build):
- Test Module Application
- Test Module Library
Тест отдельного модуля:
$ ./gradlew :library:test
Сборка отдельного модуля:
$ ./gradlew :application:publish $ ./gradlew :library:publish
Результат:
Пересборка модуля после deploy зависимого модуля:
$./gradlew --refresh-dependencies :application:compileJava
Замечание для многомодульного проекта Maven
Версии библиотек можно указать в корневом pom.xml в секции dependencyManagement:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>group-a</groupId>
<artifactId>artefact1</artifactId>
<version>1.0.0</version>
</dependency>
...
</dependencies>
</dependencyManagement>
И в модулях версию dependency можно не указывать:
<dependencies>
<dependency>
<groupId>group-a</groupId>
<artifactId>artefact1</artifactId>
</dependency>
</dependencies>