Setup project using gradle init for the initial setup.
Ensure latest gradle is available in current shell
$ sdk use gradle 6.7
Using gradle version 6.7 in this shell.
$ gradle -v
------------------------------------------------------------
Gradle 6.7
------------------------------------------------------------
Build time: 2020-10-14 16:13:12 UTC
Revision: 312ba9e0f4f8a02d01854d1ed743b79ed996dfd3
Kotlin: 1.3.72
Groovy: 2.5.12
Ant: Apache Ant(TM) version 1.10.8 compiled on May 10 2020
JVM: 1.8.0_265 (Oracle Corporation 25.265-b01)
OS: Linux 5.4.0-52-generic amd64Check JDK version
$ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)Using gradle init for generating multi-module folder structure
$ gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Split functionality across multiple subprojects?:
1: no - only one application project
2: yes - application and library projects
Enter selection (default: no - only one application project) [1..2] 2
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Project name (default: gradle-multi-module-project):
Source package (default: gradle.multi.module.project):
> Task :init
Get more help with your project: https://docs.gradle.org/6.7/samples/sample_building_java_applications_multi_project.html
BUILD SUCCESSFUL in 27s
2 actionable tasks: 2 executedChecking multi-module project structure
$ ./gradlew -q projects
------------------------------------------------------------
Root project
------------------------------------------------------------
Root project 'gradle-multi-module-project'
+--- Project ':app'
+--- Project ':list'
\--- Project ':utilities'
To see a list of the tasks of a project, run gradlew <project-path>:tasks
For example, try running gradlew :app:tasksExecuting gradle build
$ ./gradlew build
BUILD SUCCESSFUL in 27s
10 actionable tasks: 10 executedAdd springboot plugin and dependency management plugin dependencies to buildscr/build.gradle
dependencies {
implementation('org.springframework.boot:spring-boot-gradle-plugin:2.3.3.RELEASE')
implementation('io.spring.gradle:dependency-management-plugin:1.0.8.RELEASE')
}Adding springboot and dependency manager plugins to java application convention script
plugins {
// Apply the common convention plugin for shared build configuration between library and application projects.
id 'gradle.multi.module.project.java-common-conventions'
// Apply the application plugin to add support for building a CLI application in Java.
// id 'application'
// Overriding application plugin with springboot gradle plugin
id 'org.springframework.boot'
id 'io.spring.dependency-management'
}Adding springboot application annotation to App.java
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
LinkedList tokens;
tokens = split(getMessage());
System.out.println(join(tokens));
}
}Using application convention for defining springboot and Junit dependencies
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
bootJar {
enabled = true
}Gradle build for multi-module projects post convention and build.gradle changes
# Running springboot application
$ ./gradlew clean build && ./gradlew :app:bootRun
BUILD SUCCESSFUL in 6s
13 actionable tasks: 13 executed
> Task :app:bootRun
Hello World!
BUILD SUCCESSFUL in 1s
6 actionable tasks: 1 executed, 5 up-to-date