Skip to content

Commit 643c8f8

Browse files
adityamparikhclaude
andcommitted
Add Gradle Kotlin DSL build alongside Maven (dual-build overlay)
Add Gradle build files as a dual-build overlay on top of the Spring Boot 4.0 migration. Both Maven and Gradle builds coexist, allowing gradual adoption. Key changes: - gradle/libs.versions.toml: Version catalog with Boot 4.0.0, Spring Cloud 2025.1.0, Kotlin 2.2.0, and all shared dependencies - Root build.gradle.kts: Shared subproject config with dependency management, Java 17 toolchain, spring-boot-jackson2 bridge for Jackson 2/3 coexistence - settings.gradle.kts: All module includes with Spring/Confluent repos - Gradle 8.14 wrapper (required for Boot 4.0.0 compatibility) - Per-module build.gradle.kts for all 77 subprojects - Avro code generation via com.github.davidmc24.gradle.plugin.avro for 7 modules - Tests disabled for modules requiring external infrastructure (Couchbase, Kinesis/Kinesalite) matching Maven's skipTests configuration - JUnit platform launcher alignment for standalone library modules Signed-off-by: Aditya Parikh <adityamparikh@gmail.com> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 9e61c4a commit 643c8f8

86 files changed

Lines changed: 1468 additions & 2 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,10 @@ dump.rdb
2727
.apt_generated
2828
artifacts
2929
.vscode
30+
31+
# Gradle
32+
.gradle/
33+
build/
34+
!gradle/wrapper/gradle-wrapper.jar
35+
!**/src/main/**/build/
36+
!**/src/test/**/build/
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot)
3+
}
4+
5+
dependencies {
6+
implementation(platform(libs.spring.cloud.dependencies))
7+
implementation(libs.spring.cloud.stream)
8+
implementation(libs.spring.cloud.stream.binder.kafka)
9+
implementation(libs.spring.kafka)
10+
testImplementation(libs.spring.cloud.stream.test.binder)
11+
testImplementation(libs.spring.kafka.test)
12+
}

build.gradle.kts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot) apply false
3+
alias(libs.plugins.spring.dependency.management) apply false
4+
alias(libs.plugins.kotlin.jvm) apply false
5+
alias(libs.plugins.kotlin.spring) apply false
6+
}
7+
8+
val aggregatorModules = setOf(
9+
"confluent-schema-registry-integration",
10+
"function-based-stream-app-samples",
11+
"image-thumbnail-samples",
12+
"image-thumbnail-stream-sample",
13+
"couchbase-stream-applications",
14+
"kafka-e2e-kotlin-sample",
15+
"kafka-security-samples",
16+
"kafka-streams-samples",
17+
"kinesis-samples",
18+
"multi-functions-samples",
19+
"multi-binder-samples",
20+
"partitioning-samples",
21+
"kafka-partitioning",
22+
"rabbit-partitioning",
23+
"routing-samples",
24+
"spring-cloud-stream-schema-registry-integration",
25+
"testing-samples",
26+
"transaction-kafka-samples",
27+
)
28+
29+
allprojects {
30+
group = "io.spring.cloud.stream.sample"
31+
version = "0.0.1-SNAPSHOT"
32+
}
33+
34+
subprojects {
35+
if (name in aggregatorModules) return@subprojects
36+
37+
apply(plugin = "java")
38+
apply(plugin = "io.spring.dependency-management")
39+
40+
val catalog = rootProject.the<VersionCatalogsExtension>().named("libs")
41+
42+
the<io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension>().apply {
43+
imports {
44+
mavenBom("org.springframework.boot:spring-boot-dependencies:${catalog.findVersion("spring-boot").get()}")
45+
mavenBom(catalog.findLibrary("spring-cloud-dependencies").get().get().toString())
46+
}
47+
}
48+
49+
configure<JavaPluginExtension> {
50+
toolchain {
51+
languageVersion = JavaLanguageVersion.of(17)
52+
}
53+
}
54+
55+
dependencies {
56+
"implementation"(catalog.findLibrary("spring-boot-starter").get())
57+
"implementation"(catalog.findLibrary("spring-boot-starter-actuator").get())
58+
"implementation"(catalog.findLibrary("spring-boot-starter-webmvc").get())
59+
"implementation"(catalog.findLibrary("spring-boot-jackson2").get())
60+
"testImplementation"(catalog.findLibrary("spring-boot-starter-test").get())
61+
}
62+
63+
tasks.withType<Test> {
64+
useJUnitPlatform()
65+
}
66+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Aggregator module — no build configuration needed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot)
3+
alias(libs.plugins.avro.gradle)
4+
}
5+
6+
avro {
7+
setStringType("String")
8+
}
9+
10+
tasks.named<com.github.davidmc24.gradle.plugin.avro.GenerateAvroJavaTask>("generateAvroJava") {
11+
source("src/main/resources/avro")
12+
}
13+
14+
dependencies {
15+
implementation(libs.spring.cloud.stream.binder.kafka)
16+
implementation(libs.avro)
17+
implementation(libs.confluent.kafka.avro.serializer) {
18+
exclude(group = "org.slf4j", module = "slf4j-api")
19+
exclude(group = "org.slf4j", module = "slf4j-log4j12")
20+
}
21+
implementation(libs.confluent.kafka.schema.registry.client)
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot)
3+
alias(libs.plugins.avro.gradle)
4+
}
5+
6+
avro {
7+
setStringType("String")
8+
}
9+
10+
tasks.named<com.github.davidmc24.gradle.plugin.avro.GenerateAvroJavaTask>("generateAvroJava") {
11+
source("src/main/resources/avro")
12+
}
13+
14+
dependencies {
15+
implementation(libs.spring.cloud.stream.binder.kafka)
16+
implementation(libs.avro)
17+
implementation(libs.confluent.kafka.avro.serializer) {
18+
exclude(group = "org.slf4j", module = "slf4j-api")
19+
exclude(group = "org.slf4j", module = "slf4j-log4j12")
20+
}
21+
implementation(libs.confluent.kafka.schema.registry.client)
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot)
3+
alias(libs.plugins.avro.gradle)
4+
}
5+
6+
avro {
7+
setStringType("String")
8+
}
9+
10+
tasks.named<com.github.davidmc24.gradle.plugin.avro.GenerateAvroJavaTask>("generateAvroJava") {
11+
source("src/main/resources/avro")
12+
}
13+
14+
dependencies {
15+
implementation(libs.spring.cloud.stream.binder.kafka)
16+
implementation(libs.avro)
17+
implementation(libs.confluent.kafka.avro.serializer) {
18+
exclude(group = "org.slf4j", module = "slf4j-api")
19+
exclude(group = "org.slf4j", module = "slf4j-log4j12")
20+
}
21+
implementation(libs.confluent.kafka.schema.registry.client)
22+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Aggregator module — no build configuration needed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Aggregator module — no build configuration needed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
alias(libs.plugins.spring.boot)
3+
}
4+
5+
dependencies {
6+
implementation(libs.couchbase.java.client)
7+
compileOnly(libs.spring.boot.configuration.processor)
8+
annotationProcessor(libs.spring.boot.configuration.processor)
9+
implementation(libs.spring.cloud.fn.config.common)
10+
testImplementation(libs.reactor.test)
11+
testImplementation(libs.testcontainers.couchbase)
12+
testImplementation(libs.testcontainers.junit.jupiter)
13+
}

0 commit comments

Comments
 (0)