Построение проекта с несколькими модулями с помощью Gradle
1. Введение
Статья основана на:
Eclipse 4.6 (NEON)
Вы статью про Gradle повышенного уровня. Если вы начинающий в Gradle. Вам стоит посмотреть инструкцию Gradle для начинающих (Hello world Gradle) по ссылке:
2. Модель примера
Эти иллюстративные модельные примеры в данной статье.

Цель инструкции:
MathWebApp: это WebApp project
MathLibrary: это библиотека Project, содержит утилитарные классы использованные MathWebApp.
GradleMain: будет упаковывать два проекта выше, это родительский модлуль. GradleMain сделает:
- Как один модуль использует другой модуль в Gradle
- Упаковка нескольких Модулей используя Gradle (результат: jar, war).
- Запуск Web App на Gradle Tomcat Plugin.
MathWebApp: это WebApp project
MathLibrary: это библиотека Project, содержит утилитарные классы использованные MathWebApp.
GradleMain: будет упаковывать два проекта выше, это родительский модлуль. GradleMain сделает:
- Упаковку MathLibary в файл jar
- Упаковку MathWebApp в файл war.
3. Создать MathLibrary Project
- File/New/Other...

Введите:
- Project Name: MathLibrary


Проект создан.

Создание нового класса MathUtils:

Класс MathUtils имеет метод подсчета суммы двух чисел, этот класс находится в проекте MathLibrary и будет использован в проекте MathWebApp.
package org.o7planning.mathutils;
public class MathUtils {
public static int sum(int a, int b) {
return a + b;
}
}
4. Cоздать MathWebApp Project
Индентично, создать новый проект MathWebApp.


- Открыть файл build.gradle
MathWebApp это веб-приложение, который использует проект MathLibrary как библиотеку. Поэтому, вы должны объявить MathWebApp зависимым от MathLibrary.

MathWebApp/build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'
apply plugin: 'com.bmuschko.tomcat'
repositories {
jcenter()
}
dependencies {
testCompile 'junit:junit:4.12'
providedCompile "javax.servlet:javax.servlet-api:3.1.0"
compile project(':MathLibrary')
}
dependencies {
def tomcatVersion = '7.0.59'
tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}",
"org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.bmuschko:gradle-tomcat-plugin:2.2.2'
}
}
Каждый раз при изменении build.gradle вам необходимо использовать инструмент Gradle для обновления проекта .

Создать файл index.jsp, который будет использован как утилитарный класс MathUtils в проекте MathLibrary.

index.jsp
<html>
<body>
<h2>Hello World!</h2>
<%
int a = 100;
int b = 200;
int c = org.o7planning.mathutils.MathUtils.sum(a,b);
out.println("<h2>"+ c+"</h2>");
%>
</body>
</html>
5. Создать GradleMain Project
Индентично создайте проект GradleMain:

GradleMain этопроект, который выполняет обязанность построить 2 проекта MathLibrary и MathWebApp. Вам нужно определить эти 2 проекта в settings.gradle.
GradleMain/settings.gradle
rootProject.name = 'GradleMain'
include ':MathLibrary', ':MathWebApp'
project(':MathLibrary').projectDir = new File(settingsDir, '../MathLibrary')
project(':MathWebApp').projectDir = new File(settingsDir, '../MathWebApp')
И объявить GradleMain зависимым от MathLibrary & MathWebApp.
GradleMain/build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
jcenter()
}
dependencies {
testCompile 'junit:junit:4.12'
}
dependencies {
compile project(':MathLibrary')
compile project(':MathWebApp')
}
Каждый раз при изменении build.gradle вам необходимо использовать инструмент Gradle для обновления проекта.
