Building a Spring Boot Multi-Module Project with Gradle Kotlin DSL

Project Directory Strutcure

.
├── boogle-common
│   ├── build.gradle.kts
│   └── src
├── boogle-core
│   ├── build.gradle.kts
│   └── src
├── boogle-generator
│   ├── build.gradle.kts
│   └── src
├── boogle-logging
│   ├── build.gradle.kts
│   └── src
├── boogle-quartz
│   ├── build.gradle.kts
│   └── src
├── boogle-system
│   ├── build.gradle.kts
│   └── src
├── boogle-web-starter
│   ├── build.gradle.kts
│   └── src
├── buildSrc
│   ├── build
│   ├── build.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               └── org.example.app-conventions.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts

Setting Up Spring Boot Dependencies via buildSrc

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
    id("org.springframework.boot") version "2.7.3"
}

apply(plugin = "io.spring.dependency-management")

tasks.named<org.springframework.boot.gradle.tasks.bundling.BootJar>("bootJar") {
    mainClass.set("org.example.WebApplication")
}

extra["slf4j.version"] = "1.7.36"

repositories {
    maven { url = uri("https://plugins.gradle.org/m2/") }
    gradlePluginPortal()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-gradle-plugin:2.7.3")
}

buildSrc/src/main/kotlin/org.example.app-conventions.gradle.kts

import org.springframework.boot.gradle.tasks.bundling.BootJar

plugins {
    `java-library`
    `maven-publish`
    id("org.springframework.boot")
}

apply(plugin = "io.spring.dependency-management")

tasks.named<BootJar>("bootJar") {
    mainClass.set("org.example.WebApplication")
}

repositories {
    mavenLocal()
    maven { url = uri("https://maven.aliyun.com/column/public") }
    maven { url = uri("https://repo.maven.apache.org/maven2/") }
}

dependencies {
    api("org.springframework.boot:spring-boot-starter-web")
    api("org.springframework.boot:spring-boot-configuration-processor")
    api("org.projectlombok:lombok:1.18.30")
    annotationProcessor("org.projectlombok:lombok:1.18.30")
    testAnnotationProcessor("org.projectlombok:lombok:1.18.30")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test:3.5.11")
}

group = "org.example"
version = "1.0.0-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

publishing {
    publications.create<MavenPublication>("maven") {
        from(components["java"])
    }
}

tasks.withType<JavaCompile>().configureEach {
    options.encoding = "UTF-8"
}

Defining Subproject Dependencies

boogle-common/build.gradle.kts

plugins {
    id("org.example.app-conventions")
}

dependencies {
    api(project(":boogle-core"))
    api("org.springframework.boot:spring-boot-starter-aop")
    api("org.springframework.boot:spring-boot-starter-data-redis")
}

description = "Common utilities module"

boogle-core/build.gradle.kts

plugins {
    id("org.example.app-conventions")
}

dependencies {
    api("org.springframework.boot:spring-boot-starter-security")
    testImplementation("org.springframework.security:spring-security-test:5.7.11")
}

description = "Core module"

boogle-web-starter/build.gradle.kts

plugins {
    id("org.example.app-conventions")
}

dependencies {
    api(project(":boogle-system"))
    api(project(":boogle-logging"))
    api(project(":boogle-quartz"))
}

description = "Web application starter module"

Confgiuring Settings with settings.gradle.kts

rootProject.name = "XunLuAdmin"

include(":boogle-core")
include(":boogle-system")
include(":boogle-web--starter")
include(":boogle-logging")
include(":boogle-generator")
include(":boogle-quartz")
include(":boogle-common")

Building the Executable JAR

./gradlew bootJar

In IntelliJ IDEA, run the Tasks > build > bootJar task from the Gradle panel.

Tags: Gradle spring-boot kotlin-dsl multi-module build-configuration

Posted on Sat, 09 May 2026 18:54:10 +0000 by Exemption