diff --git a/build.gradle b/build.gradle index 6195e16c..5b09339b 100644 --- a/build.gradle +++ b/build.gradle @@ -2,14 +2,16 @@ plugins { id 'io.spring.nohttp' id 'org.springframework.pulsar.root-project' id 'org.springframework.pulsar.update-version' - id 'org.ajoberstar.grgit' version '4.0.1' apply false + alias(libs.plugins.grgit) apply false + alias(libs.plugins.versions) + alias(libs.plugins.version.catalog.update) } description = 'Spring for Apache Pulsar' apply from: 'gradle/aggregate-jacoco-report.gradle' apply from: 'gradle/update-copyrights.gradle' - +apply from: 'gradle/version-catalog-update.gradle' allprojects { group = 'org.springframework.pulsar' @@ -53,3 +55,11 @@ tasks.register('runAllSampleTests') { allTestsTasks } } + +versionCatalogUpdate { + versionCatalogs { + buildLibsCatalog { + catalogFile = file("gradle/build-libs.versions.toml") + } + } +} diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 850cb2ad..d08f239e 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -10,15 +10,12 @@ repositories { gradlePluginPortal() } -new File(new File("$projectDir").parentFile, "gradle.properties").withInputStream { - def properties = new Properties() - properties.load(it) - ext.set("springFrameworkVersion", properties["springFrameworkVersion"]) - if (properties["springFrameworkVersion"].contains("-")) { - repositories { - maven { url "https://repo.spring.io/milestone" } - maven { url "https://repo.spring.io/snapshot" } - } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("buildLibs") +def springVersion = versionCatalog.findVersion("spring").orElseThrow().displayName +if (springVersion.contains("-")) { + repositories { + maven { url "https://repo.spring.io/milestone" } + maven { url "https://repo.spring.io/snapshot" } } } @@ -38,24 +35,22 @@ configurations { } } -ext.set("springFrameworkVersion", "6.0.10") - dependencies { implementation localGroovy() - implementation 'commons-codec:commons-codec:1.15' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.4' - implementation 'io.github.gradle-nexus:publish-plugin:1.3.0' - implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:0.0.38") - implementation 'io.spring.nohttp:nohttp-gradle:0.0.11' - implementation "org.apache.maven:maven-embedder:3.6.3" - implementation "org.asciidoctor:asciidoctor-gradle-jvm:3.3.2" - implementation 'org.codehaus.groovy:groovy-all:2.5.17' - implementation 'org.jfrog.buildinfo:build-info-extractor-gradle:4.31.9' - implementation "org.gradle:test-retry-gradle-plugin:1.4.0" - implementation 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1' - implementation(platform("org.springframework:spring-framework-bom:${springFrameworkVersion}")) - implementation 'org.springframework:spring-core' - implementation 'org.springframework:spring-web' + implementation buildLibs.asciidoc.gradle.jvm + implementation buildLibs.commons.codec + implementation buildLibs.groovy.all + implementation buildLibs.jfrog.build.extractor.gradle + implementation buildLibs.jackson.databind + implementation buildLibs.javaformat.gradle + implementation buildLibs.maven.embedder + implementation buildLibs.nexus.publish + implementation buildLibs.nohttp.gradle + implementation buildLibs.sonarqube.gradle + implementation(platform(buildLibs.spring.bom)) + implementation buildLibs.spring.core + implementation buildLibs.spring.web + implementation buildLibs.test.retry.gradle } gradlePlugin { diff --git a/buildSrc/settings.gradle b/buildSrc/settings.gradle index 4cdfcbf3..d463be9f 100644 --- a/buildSrc/settings.gradle +++ b/buildSrc/settings.gradle @@ -4,3 +4,11 @@ pluginManagement { gradlePluginPortal() } } + +dependencyResolutionManagement { + versionCatalogs { + buildLibs { + from(files("../gradle/build-libs.versions.toml")) + } + } +} diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/AbstractSpringModulePlugin.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/AbstractSpringModulePlugin.java index f574cc78..0b87fa64 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/AbstractSpringModulePlugin.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/AbstractSpringModulePlugin.java @@ -23,7 +23,6 @@ import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.PluginManager; import org.springframework.pulsar.gradle.optional.OptionalDependenciesPlugin; -import org.springframework.pulsar.gradle.publish.SpringMavenPlugin; import io.spring.gradle.convention.RepositoryConventionPlugin; diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/JavaConventionsPlugin.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/JavaConventionsPlugin.java index 5ee1d176..f048c1e4 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/JavaConventionsPlugin.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/JavaConventionsPlugin.java @@ -123,7 +123,7 @@ public class JavaConventionsPlugin implements Plugin { project.getTasks().withType(Format.class, (Format) -> Format.setEncoding("UTF-8")); project.getPlugins().apply(CheckstylePlugin.class); CheckstyleExtension checkstyle = project.getExtensions().getByType(CheckstyleExtension.class); - checkstyle.setToolVersion("8.45.1"); + checkstyle.setToolVersion("10.12.4"); checkstyle.getConfigDirectory().set(project.getRootProject().file("src/checkstyle")); String version = SpringJavaFormatPlugin.class.getPackage().getImplementationVersion(); DependencySet checkstyleDependencies = project.getConfigurations().getByName("checkstyle").getDependencies(); diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/check/JacocoConventionsPlugin.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/check/JacocoConventionsPlugin.java index 21acbb8e..384c0287 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/check/JacocoConventionsPlugin.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/check/JacocoConventionsPlugin.java @@ -2,6 +2,7 @@ package org.springframework.pulsar.gradle.check; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.artifacts.VersionCatalogsExtension; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.tasks.testing.Test; import org.gradle.testing.jacoco.plugins.JacocoPlugin; @@ -19,8 +20,10 @@ public class JacocoConventionsPlugin implements Plugin { public void apply(final Project project) { project.getPlugins().withType(JavaPlugin.class, (javaPlugin) -> { project.getPluginManager().apply(JacocoPlugin.class); + VersionCatalogsExtension catalog = project.getExtensions().getByType(VersionCatalogsExtension.class); + String jacocoVeresion = catalog.named("libs").findVersion("jacoco").orElseThrow().getDisplayName(); project.getExtensions().configure(JacocoPluginExtension.class, - (jacocoExtension) -> jacocoExtension.setToolVersion("0.8.9")); + (jacocoExtension) -> jacocoExtension.setToolVersion(jacocoVeresion)); project.getTasks().withType(Test.class, (test) -> project.getTasks().withType(JacocoReport.class, test::finalizedBy)); }); diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java index b6f297c2..9b65f4d0 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateProjectVersionTask.java @@ -17,13 +17,13 @@ package org.springframework.pulsar.gradle.versions; import java.io.File; -import java.util.Objects; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.gradle.api.DefaultTask; import org.gradle.api.Project; +import org.gradle.api.artifacts.VersionCatalogsExtension; import org.springframework.lang.Nullable; @@ -31,36 +31,43 @@ public abstract class UpdateProjectVersionTask extends DefaultTask { static final String VERSION_PROPERTY = "version"; - static final String SPRING_BOOT_VERSION_PROPERTY = "springBootVersionForDocs"; + static final String SPRING_BOOT_VERSION_PROPERTY = "spring-boot-for-docs"; static final Pattern VERSION_PATTERN = Pattern.compile("^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-M\\d+|-RC\\d+|-SNAPSHOT)?$"); protected void updateVersionInGradleProperties(String newVersion) { - this.updatePropertyInGradleProperties(VERSION_PROPERTY, (p) -> p.getVersion().toString(), newVersion); + this.updatePropertyInFile(Project.GRADLE_PROPERTIES, VERSION_PROPERTY, + (p) -> p.getVersion().toString(), + (__) -> newVersion, + (currentValue) -> "%s=%s".formatted(VERSION_PROPERTY, currentValue), + (__) -> "%s=%s".formatted(VERSION_PROPERTY, newVersion)); } - protected void updatePropertyInGradleProperties(String propertyName, String newPropertyValue) { - this.updatePropertyInGradleProperties(propertyName, - (p) -> Objects.toString(p.findProperty(propertyName), ""), newPropertyValue); + protected void updateVersionInTomlVersions(String versionPropertyName, + Function newPropertyValueGivenCurrentValue) { + this.updatePropertyInFile("gradle/libs.versions.toml", versionPropertyName, + (p) -> currentVersionForProperty(p, versionPropertyName), + newPropertyValueGivenCurrentValue, + (currentValue) -> "%s = \"%s\"".formatted(versionPropertyName, currentValue), + (newValue) -> "%s = \"%s\"".formatted(versionPropertyName, newValue)); } - protected void updatePropertyInGradleProperties( - String propertyName, - Function currentPropertyValueFromProject, - String newPropertyValue) { - String currentPropertyValue = currentPropertyValueFromProject.apply(getProject()); - File gradlePropertiesFile = getProject().getRootProject().file(Project.GRADLE_PROPERTIES); - if (!gradlePropertiesFile.exists()) { - throw new RuntimeException("No gradle.properties to update property in"); + protected void updatePropertyInFile(String propertyFile, String propertyName, + Function currentPropertyValueGivenProject, + Function newPropertyValueGivenCurrentValue, + Function expectedCurrentPropertyEntryInFile, + Function newPropertyEntryInFile) { + File file = getProject().getRootProject().file(propertyFile); + if (!file.exists()) { + throw new RuntimeException("File not found at " + propertyFile); } - System.out.printf("Updating the %s property in %s from %s to %s%n", - propertyName, Project.GRADLE_PROPERTIES, currentPropertyValue, newPropertyValue); - FileUtils.replaceFileText(gradlePropertiesFile, (gradlePropertiesText) -> { - gradlePropertiesText = gradlePropertiesText.replace( - "%s=%s".formatted(propertyName, currentPropertyValue), - "%s=%s".formatted(propertyName, newPropertyValue)); - return gradlePropertiesText; - }); + String currentValue = currentPropertyValueGivenProject.apply(getProject()); + String newValue = newPropertyValueGivenCurrentValue.apply(currentValue); + System.out.printf("Updating the %s property in %s from %s to %s%n", propertyName, + propertyFile, currentValue, newValue); + FileUtils.replaceFileText(file, (propertiesText) -> propertiesText.replace( + expectedCurrentPropertyEntryInFile.apply(currentValue), + newPropertyEntryInFile.apply(newValue))); } protected VersionInfo parseVersion(String version) { @@ -78,6 +85,13 @@ public abstract class UpdateProjectVersionTask extends DefaultTask { } } + protected String currentVersionForProperty(Project project, String versionProperty) { + VersionCatalogsExtension catalog = project.getExtensions().getByType(VersionCatalogsExtension.class); + return catalog.named("libs").findVersion(versionProperty) + .orElseThrow(() -> new IllegalStateException("% property not found".formatted(versionProperty))) + .getDisplayName(); + } + record VersionInfo(String major, String minor, String patch, @Nullable String modifier) { } } diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java index 83a58906..0395b5ac 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToReleaseVersionTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 the original author or authors. + * Copyright 2019-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,9 @@ package org.springframework.pulsar.gradle.versions; -import java.util.Objects; - import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; -import org.springframework.util.Assert; - public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTask { @Input @@ -31,7 +27,7 @@ public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTas @TaskAction public void updateToReleaseVersion() { updateVersionInGradleProperties(this.releaseVersion); - updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateReleaseBootVersion()); + updateVersionInTomlVersions(SPRING_BOOT_VERSION_PROPERTY, this::calculateReleaseBootVersion); } public String getReleaseVersion() { @@ -42,9 +38,7 @@ public abstract class UpdateToReleaseVersionTask extends UpdateProjectVersionTas this.releaseVersion = releaseVersion; } - private String calculateReleaseBootVersion() { - String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null); - Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY)); + private String calculateReleaseBootVersion(String currentBootVersion) { VersionInfo bootVersionSegments = parseVersion(currentBootVersion); String releaseBootVersion = "%s.%s.%s".formatted(bootVersionSegments.major(), bootVersionSegments.minor(), bootVersionSegments.patch()); String releaseVersionModifier = parseVersion(this.releaseVersion).modifier(); diff --git a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java index 21f69b59..2557f510 100644 --- a/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java +++ b/buildSrc/src/main/java/org/springframework/pulsar/gradle/versions/UpdateToSnapshotVersionTask.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 the original author or authors. + * Copyright 2019-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,21 +16,15 @@ package org.springframework.pulsar.gradle.versions; -import java.util.Objects; - import org.gradle.api.tasks.TaskAction; -import org.springframework.util.Assert; - public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTask { @TaskAction public void updateToSnapshotVersion() { String currentVersion = getProject().getVersion().toString(); updateVersionInGradleProperties(calculateNextSnapshotVersion(currentVersion)); - String currentBootVersion = Objects.toString(getProject().findProperty(SPRING_BOOT_VERSION_PROPERTY), null); - Assert.notNull(currentBootVersion, () -> "% property not found".formatted(SPRING_BOOT_VERSION_PROPERTY)); - updatePropertyInGradleProperties(SPRING_BOOT_VERSION_PROPERTY, calculateNextSnapshotVersion(currentBootVersion)); + updateVersionInTomlVersions(SPRING_BOOT_VERSION_PROPERTY, this::calculateNextSnapshotVersion); } private String calculateNextSnapshotVersion(String version) { @@ -45,12 +39,4 @@ public abstract class UpdateToSnapshotVersionTask extends UpdateProjectVersionTa } return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment); } - - private String calculateCurrentSnapshotVersion(String version) { - VersionInfo versionSegments = parseVersion(version); - String majorSegment = versionSegments.major(); - String minorSegment = versionSegments.minor(); - String patchSegment = versionSegments.patch(); - return "%s.%s.%s-SNAPSHOT".formatted(majorSegment, minorSegment, patchSegment); - } } diff --git a/gradle.properties b/gradle.properties index 2d9bed49..1fe61dd0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,3 @@ version=1.0.2-SNAPSHOT org.gradle.caching=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -Dfile.encoding=UTF-8 - -pulsarClientVersion=3.1.1 -pulsarClientReactiveVersion=0.5.1 -springFrameworkVersion=6.1.2 - -# only used by integration tests and samples (unpublished deps) -springBootVersion=3.2.2-SNAPSHOT - -# only used for docs (links) -springBootVersionForDocs=3.2.2-SNAPSHOT - -springCloudStreamVersion=4.1.0 diff --git a/gradle/aggregate-jacoco-report.gradle b/gradle/aggregate-jacoco-report.gradle index fb001416..36cddec2 100644 --- a/gradle/aggregate-jacoco-report.gradle +++ b/gradle/aggregate-jacoco-report.gradle @@ -1,7 +1,7 @@ apply plugin: 'jacoco' jacoco { - toolVersion '0.8.9' + toolVersion libs.versions.jacoco.get() } tasks.withType(Test) { diff --git a/gradle/antora-docs.gradle b/gradle/antora-docs.gradle index 80e986b0..2f24be15 100644 --- a/gradle/antora-docs.gradle +++ b/gradle/antora-docs.gradle @@ -1,3 +1,4 @@ +//file:noinspection GroovyUnusedAssignment node { version = '16.16.0' } @@ -36,11 +37,17 @@ tasks.create('generateAntoraResources') { } def generateAttributes() { - return ['spring-boot-version': project.springBootVersionForDocs ?: 'current', - 'spring-framework-version': project.springFrameworkVersion ?: 'current', - 'spring-cloud-stream-version': project.springCloudStreamVersion ?: 'current', - 'spring-pulsar-version': project.version, - 'pulsar-client-version': project.pulsarClientVersion ?: 'current', - 'pulsar-client-reactive-version': project.pulsarClientReactiveVersion ?: 'current', - 'is-snapshot-version': project.version.endsWith("-SNAPSHOT")] + def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") + def springBootVersionForDocs = versionCatalog.findVersion("spring-boot-for-docs").orElseThrow().displayName + def springFrameworkVersion = versionCatalog.findVersion("spring").orElseThrow().displayName + def springCloudStreamVersion = versionCatalog.findVersion("spring-cloud-stream").orElseThrow().displayName + def pulsarClientVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + def pulsarClientReactiveVersion = versionCatalog.findVersion("pulsar-reactive").orElseThrow().displayName + return ['is-snapshot-version': project.version.endsWith("-SNAPSHOT"), + 'pulsar-client-version': pulsarClientVersion ?: 'current', + 'pulsar-client-reactive-version': pulsarClientReactiveVersion ?: 'current', + 'spring-boot-version': springBootVersionForDocs ?: 'current', + 'spring-cloud-stream-version': springCloudStreamVersion ?: 'current', + 'spring-framework-version': springFrameworkVersion ?: 'current', + 'spring-pulsar-version': project.version] } diff --git a/gradle/build-libs.versions.toml b/gradle/build-libs.versions.toml new file mode 100644 index 00000000..27902d35 --- /dev/null +++ b/gradle/build-libs.versions.toml @@ -0,0 +1,33 @@ +[versions] +asciidoc-gradle = "3.3.2" +commons-codec = "1.16.0" +groovy = "2.5.17" +jackson = "2.15.3" +javaformat = "0.0.40" +jfrog = "4.31.9" +maven = "3.6.3" +nexus-publish = "1.3.0" +nohttp = "0.0.11" +sonarqube = "2.7.1" +spring = "6.1.2" +test-retry = "1.4.0" +versions = "0.50.0" +version-catalog-update = "0.8.1" + +[libraries] +asciidoc-gradle-jvm = { module = "org.asciidoctor:asciidoctor-gradle-jvm", version.ref = "asciidoc-gradle" } +commons-codec = { module = "commons-codec:commons-codec", version.ref = "commons-codec" } +groovy-all = { module = "org.codehaus.groovy:groovy-all", version.ref = "groovy" } +jackson-bom = { module = "com.fasterxml.jackson:jackson-bom", version.ref = "jackson" } +jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } +javaformat-checkstyle = { module = "io.spring.javaformat:spring-javaformat-checkstyle", version.ref = "javaformat" } +javaformat-gradle = { module = "io.spring.javaformat:spring-javaformat-gradle-plugin", version.ref = "javaformat" } +jfrog-build-extractor-gradle = { module = "org.jfrog.buildinfo:build-info-extractor-gradle", version.ref = "jfrog" } +maven-embedder = { module = "org.apache.maven:maven-embedder", version.ref = "maven" } +nexus-publish = { module = "io.github.gradle-nexus:publish-plugin", version.ref = "nexus-publish" } +nohttp-gradle = { module = "io.spring.nohttp:nohttp-gradle", version.ref = "nohttp" } +sonarqube-gradle = { module = "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin", version.ref = "sonarqube" } +spring-bom = { module = "org.springframework:spring-framework-bom", version.ref = "spring" } +spring-core = { module = "org.springframework:spring-core", version.ref = "spring" } +spring-web = { module = "org.springframework:spring-web", version.ref = "spring" } +test-retry-gradle = { module = "org.gradle:test-retry-gradle-plugin", version.ref = "test-retry" } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..92721b4d --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,90 @@ +[versions] +# product +brave = "5.16.0" +caffeine = "3.1.8" +commons-codec = "1.16.0" +jackson = "2.15.3" +jsr305 = "3.0.2" +logback = "1.4.14" +log4j = "2.17.1" +micrometer = "1.12.1" +micrometer-docs-gen = "1.0.0" +micrometer-tracing = "1.2.1" +protobuf = "3.21.5" +pulsar = "3.1.1" +pulsar-reactive = "0.5.1" +reactor = "2023.0.1" +spring = "6.1.2" +# tests +assertj = "3.24.2" +awaitility = "4.2.0" +jacoco = "0.8.9" +json-path = "2.8.0" +junit = "5.10.1" +hamcrest = "2.1" +mockito = "5.7.0" +spring-dep-mgmt = "1.1.4" +spring-boot = "3.2.2-SNAPSHOT" +spring-boot-for-docs = "3.2.2-SNAPSHOT" +spring-cloud-stream = "4.1.0" +spring-retry = "2.0.5" +system-lambda = "1.2.1" +testcontainers = "1.19.3" +# plugins +antora = "1.0.0" +antora-yml = "0.0.1" +download = "5.3.0" +grgit = "4.0.1" +nohttp = "0.0.11" +shadow = "7.1.2" +versions = "0.50.0" +version-catalog-update = "0.8.1" + +[libraries] +# Product libs +brave-bom = { module = "io.zipkin.brave:brave-bom", version.ref = "brave" } +caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" } +commons-codec = { module = "commons-codec:commons-codec", version.ref = "commons-codec" } +jackson-bom = { module = "com.fasterxml.jackson:jackson-bom", version.ref = "jackson" } +jsr305 = { module = "com.google.code.findbugs:jsr305", version.ref = "jsr305" } +logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } +log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j" } +micrometer-bom = { module = "io.micrometer:micrometer-bom", version.ref = "micrometer" } +micrometer-docs-gen = { module = "io.micrometer:micrometer-docs-generator", version.ref = "micrometer-docs-gen" } +micrometer-tracing-bom = { module = "io.micrometer:micrometer-tracing-bom", version.ref = "micrometer-tracing" } +protobuf-java = { module = "com.google.protobuf:protobuf-java", version.ref = "protobuf" } +pulsar-client-all = { module = "org.apache.pulsar:pulsar-client-all", version.ref = "pulsar" } +pulsar-client-reactive-adapter = { module = "org.apache.pulsar:pulsar-client-reactive-adapter", version.ref = "pulsar-reactive" } +pulsar-client-reactive-producer-cache-caffeine-shaded = { module = "org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine-shaded", version.ref = "pulsar-reactive" } +pulsar-functions-api = { module = "org.apache.pulsar:pulsar-functions-api", version.ref = "pulsar" } +reactor-bom = { module = "io.projectreactor:reactor-bom", version.ref = "reactor" } +spring-bom = { module = "org.springframework:spring-framework-bom", version.ref = "spring" } +spring-retry = { module = "org.springframework.retry:spring-retry", version.ref = "spring-retry" } +# Testing libs +assertj-bom = { module = "org.assertj:assertj-bom", version.ref = "assertj" } +awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" } +hamcrest = { module = "org.hamcrest:hamcrest", version.ref = "hamcrest" } +json-path = { module = "com.jayway.jsonpath:json-path", version.ref = "json-path" } +junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" } +mockito-bom = { module = "org.mockito:mockito-bom", version.ref = "mockito" } +spring-boot-starter-amqp = { module = "org.springframework.boot:spring-boot-starter-amqp", version.ref = "spring-boot" } +spring-boot-starter-pulsar = { module = "org.springframework.boot:spring-boot-starter-pulsar", version.ref = "spring-boot" } +spring-boot-starter-pulsar-reactive = { module = "org.springframework.boot:spring-boot-starter-pulsar-reactive", version.ref = "spring-boot" } +spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test", version.ref = "spring-boot" } +spring-boot-testcontainers = { module = "org.springframework.boot:spring-boot-testcontainers", version.ref = "spring-boot" } +spring-test = { module = "org.springframework:spring-test", version.ref = "spring" } +system-lambda = { module = "com.github.stefanbirkner:system-lambda", version.ref = "system-lambda" } +testcontainers-bom = { module = "org.testcontainers:testcontainers-bom", version.ref = "testcontainers" } +testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" } + +[plugins] +antora = { id = "org.antora", version.ref = "antora" } +antora-yml = { id = "io.spring.antora.generate-antora-yml", version.ref = "antora-yml" } +download = { id = "de.undercouch.download", version.ref = "download" } +grgit = { id = "org.ajoberstar.grgit", version.ref = "grgit" } +nohttp = { id = "io.spring.nohttp", version.ref = "nohttp" } +shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" } +spring-boot = { id = "org.springframework.boot", version.ref = "spring-boot" } +spring-dep-mgmt = { id = "io.spring.dependency-management", version.ref = "spring-dep-mgmt" } +versions = { id = "com.github.ben-manes.versions", version.ref = "versions" } +version-catalog-update = { id = "nl.littlerobots.version-catalog-update", version.ref = "version-catalog-update" } diff --git a/gradle/version-catalog-update.gradle b/gradle/version-catalog-update.gradle new file mode 100644 index 00000000..42fa330e --- /dev/null +++ b/gradle/version-catalog-update.gradle @@ -0,0 +1,44 @@ + +def isNonStable = { String version -> + def unstableKeyword = ['alpha', 'beta', 'rc'].any { it -> version.contains(it) } + if (unstableKeyword) { + return true + } + def containsStableKeyword = ['RELEASE', 'FINAL', 'GA'].any { it -> version.toUpperCase().contains(it) } + def containsStableSuffix = (version ==~ /^[0-9,.v-]+(-r)?$/) + return !containsStableKeyword && !containsStableSuffix +} + +def trustedLibPrefixes = [ + "org.springframework.", + "io.micrometer.", + "io.spring.dependency-management:", + "org.apache.pulsar:pulsar-client-reactive", + "io.projectreactor:reactor" +] + +tasks.named("dependencyUpdates").configure { + checkConstraints = true + rejectVersionIf { + def isTrustedLib = trustedLibPrefixes.any { s -> it.candidate.toString().startsWith(s) } + if (isTrustedLib) { + def (candidateMajorMinorPatch, candidateMilestone) = it.candidate.version.tokenize('-') + def (candidateMajor, candidateMinor, candidatePatch) = candidateMajorMinorPatch.tokenize('.') + def (currentMajorMinorPatch, currentMilestone) = it.currentVersion.tokenize('-') + def (currentMajor, currentMinor, currentPatch) = currentMajorMinorPatch.tokenize('.') + return (candidateMajor.toInteger() < currentMajor.toInteger()) + || (candidateMinor.toInteger() < currentMinor.toInteger()) + || (candidatePatch.toInteger() < currentPatch.toInteger()) + } + return isNonStable(it.candidate.version) + } +} + +versionCatalogUpdate { + sortByKey = false + keep { + keepUnusedLibraries = true + keepUnusedVersions = true + keepUnusedPlugins = true + } +} diff --git a/integration-tests/integration-tests.gradle b/integration-tests/integration-tests.gradle index 4001348d..aa75cf0a 100644 --- a/integration-tests/integration-tests.gradle +++ b/integration-tests/integration-tests.gradle @@ -1,7 +1,7 @@ plugins { id 'org.springframework.pulsar.spring-unpublished-module' - id "de.undercouch.download" version "5.3.0" id 'spring-pulsar.integration-test-conventions' + alias(libs.plugins.download) } description = 'Spring Pulsar Integration Tests' @@ -16,17 +16,17 @@ dependencies { intTestImplementation project(':spring-pulsar') intTestImplementation project(':spring-pulsar-reactive') intTestImplementation project(':spring-pulsar-test') - intTestRuntimeOnly 'ch.qos.logback:logback-classic' - intTestRuntimeOnly 'org.junit.platform:junit-platform-launcher' intTestImplementation 'org.awaitility:awaitility' - intTestImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}" - intTestImplementation "org.springframework.boot:spring-boot-starter-amqp:${springBootVersion}" - intTestImplementation "org.springframework.boot:spring-boot-starter-pulsar:${springBootVersion}" - intTestImplementation "org.springframework.boot:spring-boot-starter-pulsar-reactive:${springBootVersion}" - intTestImplementation "org.springframework.boot:spring-boot-testcontainers:${springBootVersion}" intTestImplementation 'org.testcontainers:junit-jupiter' intTestImplementation 'org.testcontainers:pulsar' intTestImplementation 'org.testcontainers:rabbitmq' + intTestImplementation libs.spring.boot.starter.test + intTestImplementation libs.spring.boot.starter.amqp + intTestImplementation libs.spring.boot.starter.pulsar + intTestImplementation libs.spring.boot.starter.pulsar.reactive + intTestImplementation libs.spring.boot.testcontainers + intTestRuntimeOnly 'org.junit.platform:junit-platform-launcher' + intTestRuntimeOnly libs.logback.classic } test { @@ -37,6 +37,9 @@ integrationTest { maxHeapSize '2048m' } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + task downloadRabbitConnector { onlyIf { System.getProperty("downloadRabbitConnector") == "true" @@ -45,8 +48,8 @@ task downloadRabbitConnector { try { download.run { println "Downloading Rabbit connector to 'src/intTest/resources/connectors/' (one time only if not already downloaded)..." - src 'https://archive.apache.org/dist/pulsar/pulsar-3.1.1/connectors/pulsar-io-rabbitmq-3.1.1.nar' - dest "$buildDir/../src/intTest/resources/connectors/pulsar-io-rabbitmq-3.1.1.nar" + src "https://archive.apache.org/dist/pulsar/pulsar-${pulsarVersion}/connectors/pulsar-io-rabbitmq-${pulsarVersion}.nar" + dest "$buildDir/../src/intTest/resources/connectors/pulsar-io-rabbitmq-${pulsarVersion}.nar" overwrite false } } catch (Exception ex) { diff --git a/spring-pulsar-cache-provider-caffeine/spring-pulsar-cache-provider-caffeine.gradle b/spring-pulsar-cache-provider-caffeine/spring-pulsar-cache-provider-caffeine.gradle index 800bbc96..7457aa8e 100644 --- a/spring-pulsar-cache-provider-caffeine/spring-pulsar-cache-provider-caffeine.gradle +++ b/spring-pulsar-cache-provider-caffeine/spring-pulsar-cache-provider-caffeine.gradle @@ -1,13 +1,13 @@ plugins { id 'org.springframework.pulsar.spring-module' - id 'com.github.johnrengelman.shadow' version '7.1.2' + alias(libs.plugins.shadow) } description = 'Spring Pulsar Caffeine Cache Provider' dependencies { api project (':spring-pulsar-cache-provider') - implementation 'com.github.ben-manes.caffeine:caffeine' + implementation libs.caffeine shadow project(':spring-pulsar-cache-provider') } diff --git a/spring-pulsar-dependencies/spring-pulsar-dependencies.gradle b/spring-pulsar-dependencies/spring-pulsar-dependencies.gradle index c5c3f300..3a58baf2 100644 --- a/spring-pulsar-dependencies/spring-pulsar-dependencies.gradle +++ b/spring-pulsar-dependencies/spring-pulsar-dependencies.gradle @@ -1,5 +1,6 @@ plugins { id 'java-platform' + id 'io.spring.convention.repository' } javaPlatform { @@ -7,27 +8,29 @@ javaPlatform { } dependencies { - api platform("com.fasterxml.jackson:jackson-bom:2.15.3") - api platform("io.micrometer:micrometer-bom:1.12.1") - api platform("io.micrometer:micrometer-tracing-bom:1.2.1") - api platform("io.projectreactor:reactor-bom:2023.0.1") - api platform("io.zipkin.brave:brave-bom:5.16.0") - api platform("org.assertj:assertj-bom:3.24.2") - api platform("org.awaitility:awaitility:4.2.0") - api platform("org.junit:junit-bom:5.10.1") - api platform("org.mockito:mockito-bom:5.7.0") - api platform("org.springframework:spring-framework-bom:$springFrameworkVersion") - api platform("org.testcontainers:testcontainers-bom:1.19.3") + api platform(libs.jackson.bom) + api platform(libs.micrometer.bom) + api platform(libs.micrometer.tracing.bom) + api platform(libs.reactor.bom) + api platform(libs.brave.bom) + api platform(libs.assertj.bom) + api platform(libs.awaitility) + api platform(libs.junit.bom) + api platform(libs.mockito.bom) + api platform(libs.spring.bom) + api platform(libs.testcontainers.bom) constraints { - api "ch.qos.logback:logback-classic:1.4.14" - api "com.github.ben-manes.caffeine:caffeine:3.1.8" - api "com.google.code.findbugs:jsr305:3.0.2" - api "com.google.protobuf:protobuf-java:3.21.5" - api "com.jayway.jsonpath:json-path:2.8.0" - api "org.apache.pulsar:pulsar-client-all:$pulsarClientVersion" - api "org.apache.pulsar:pulsar-client-reactive-adapter:$pulsarClientReactiveVersion" - api "org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine-shaded:$pulsarClientReactiveVersion" - api "org.springframework.retry:spring-retry:2.0.5" + api libs.logback.classic + api libs.caffeine + api libs.jsr305 + api libs.protobuf.java + api libs.json.path + api libs.micrometer.docs.gen + api libs.pulsar.client.all + api libs.pulsar.client.reactive.adapter + api libs.pulsar.client.reactive.producer.cache.caffeine.shaded + api libs.spring.retry + api libs.system.lambda } } diff --git a/spring-pulsar-docs/spring-pulsar-docs.gradle b/spring-pulsar-docs/spring-pulsar-docs.gradle index 78a30922..55e1571e 100644 --- a/spring-pulsar-docs/spring-pulsar-docs.gradle +++ b/spring-pulsar-docs/spring-pulsar-docs.gradle @@ -1,24 +1,20 @@ plugins { id 'org.springframework.pulsar.spring-docs-module' - id 'org.antora' version '1.0.0' - id 'io.spring.antora.generate-antora-yml' version '0.0.1' + alias(libs.plugins.antora) + alias(libs.plugins.antora.yml) } apply from: "${rootDir}/gradle/antora-docs.gradle" description = 'Spring for Apache Pulsar Docs' -ext { - micrometerDocsVersion="1.0.0" -} - configurations { observationDocs } dependencies { api project (':spring-pulsar') - observationDocs "io.micrometer:micrometer-docs-generator:$micrometerDocsVersion" + observationDocs libs.micrometer.docs.gen } jar { diff --git a/spring-pulsar-reactive/spring-pulsar-reactive.gradle b/spring-pulsar-reactive/spring-pulsar-reactive.gradle index 45e38610..ab5aeb66 100644 --- a/spring-pulsar-reactive/spring-pulsar-reactive.gradle +++ b/spring-pulsar-reactive/spring-pulsar-reactive.gradle @@ -6,27 +6,27 @@ description = 'Spring Pulsar Reactive Support' dependencies { api project (':spring-pulsar') - api ('org.apache.pulsar:pulsar-client-reactive-adapter') { + api (libs.pulsar.client.reactive.adapter) { // spring-pulsar includes a pulsar-client with its unwanted transitive deps excluded exclude group: "org.apache.pulsar", module: "pulsar-client" } - api("org.apache.pulsar:pulsar-client-reactive-producer-cache-caffeine-shaded") { + api(libs.pulsar.client.reactive.producer.cache.caffeine.shaded) { // (above) we include a pulsar-client-reactive-adapter whose pulsar-client with // unwanted transitive deps excluded exclude group: "org.apache.pulsar", module: "pulsar-client-reactive-adapter" } implementation 'com.fasterxml.jackson.core:jackson-core' implementation 'com.fasterxml.jackson.core:jackson-databind' - implementation 'com.google.code.findbugs:jsr305' + implementation libs.jsr305 optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8' optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda' - optional 'com.google.protobuf:protobuf-java' - optional 'com.jayway.jsonpath:json-path' optional 'io.projectreactor:reactor-core' + optional libs.protobuf.java + optional libs.json.path testImplementation project(':spring-pulsar-test') - testRuntimeOnly 'ch.qos.logback:logback-classic' + testRuntimeOnly libs.logback.classic testImplementation 'io.projectreactor:reactor-test' testImplementation 'org.assertj:assertj-core' testImplementation 'org.awaitility:awaitility' diff --git a/spring-pulsar-sample-apps/sample-failover-custom-router/build.gradle b/spring-pulsar-sample-apps/sample-failover-custom-router/build.gradle index 648a9e81..5baa3542 100644 --- a/spring-pulsar-sample-apps/sample-failover-custom-router/build.gradle +++ b/spring-pulsar-sample-apps/sample-failover-custom-router/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } description = 'Spring Pulsar Sample (Custom Routing w/ Failover)' @@ -12,7 +12,11 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } -ext['spring-pulsar.version'] = '${project.version}' +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" dependencies { implementation 'org.springframework.boot:spring-boot-starter-pulsar' diff --git a/spring-pulsar-sample-apps/sample-imperative-produce-consume/build.gradle b/spring-pulsar-sample-apps/sample-imperative-produce-consume/build.gradle index deef9a18..20a25897 100644 --- a/spring-pulsar-sample-apps/sample-imperative-produce-consume/build.gradle +++ b/spring-pulsar-sample-apps/sample-imperative-produce-consume/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } description = 'Spring Pulsar Sample (Imperative Produce and Consume)' @@ -12,7 +12,11 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } -ext['spring-pulsar.version'] = '${project.version}' +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" dependencies { implementation 'org.springframework.boot:spring-boot-starter-pulsar' diff --git a/spring-pulsar-sample-apps/sample-pulsar-binder/build.gradle b/spring-pulsar-sample-apps/sample-pulsar-binder/build.gradle index 9a712372..eac7e653 100644 --- a/spring-pulsar-sample-apps/sample-pulsar-binder/build.gradle +++ b/spring-pulsar-sample-apps/sample-pulsar-binder/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } description = 'Spring Cloud Stream Binder for Pulsar Sample Application' @@ -12,8 +12,15 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName +def springCloudStreamVersion = versionCatalog.findVersion("spring-cloud-stream").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" + dependencies { - implementation "org.springframework.boot:spring-boot-starter-pulsar:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-pulsar" implementation "org.springframework.cloud:spring-cloud-stream-binder-pulsar:${springCloudStreamVersion}" } diff --git a/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-app/build.gradle b/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-app/build.gradle index 505fbfaf..d3b04d39 100644 --- a/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-app/build.gradle +++ b/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-app/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } group = 'org.springframework.pulsar.sample' @@ -13,9 +13,16 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def springCloudStreamVersion = versionCatalog.findVersion("spring-cloud-stream").orElseThrow().displayName +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" + dependencies { implementation "org.springframework.cloud:spring-cloud-stream-binder-pulsar:${springCloudStreamVersion}" - implementation "org.springframework.boot:spring-boot-starter-pulsar:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-pulsar" implementation 'org.springframework.boot:spring-boot-starter-amqp' implementation 'org.springframework.boot:spring-boot-starter-data-cassandra' implementation 'org.springframework.boot:spring-boot-starter-actuator' diff --git a/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-function/build.gradle b/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-function/build.gradle index f423d73f..2e189bb0 100644 --- a/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-function/build.gradle +++ b/spring-pulsar-sample-apps/sample-pulsar-functions/sample-signup-function/build.gradle @@ -10,9 +10,12 @@ repositories { mavenCentral() } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + dependencies { - implementation 'org.apache.pulsar:pulsar-client-all:3.1.1' - implementation 'org.apache.pulsar:pulsar-functions-api:3.1.1' + implementation "org.apache.pulsar:pulsar-client-all:${pulsarVersion}" + implementation "org.apache.pulsar:pulsar-functions-api:${pulsarVersion}" compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' } diff --git a/spring-pulsar-sample-apps/sample-pulsar-reader/build.gradle b/spring-pulsar-sample-apps/sample-pulsar-reader/build.gradle index eae4b76a..a3ab9a65 100644 --- a/spring-pulsar-sample-apps/sample-pulsar-reader/build.gradle +++ b/spring-pulsar-sample-apps/sample-pulsar-reader/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } description = 'Spring Pulsar Sample Application (Reader)' @@ -12,8 +12,14 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" + dependencies { - implementation "org.springframework.boot:spring-boot-starter-pulsar:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-pulsar" } test { diff --git a/spring-pulsar-sample-apps/sample-reactive/build.gradle b/spring-pulsar-sample-apps/sample-reactive/build.gradle index 1e485bcc..27ab530a 100644 --- a/spring-pulsar-sample-apps/sample-reactive/build.gradle +++ b/spring-pulsar-sample-apps/sample-reactive/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' - id 'org.springframework.boot' version '3.2.2-SNAPSHOT' - id 'io.spring.dependency-management' version '1.1.4' + alias(libs.plugins.spring.boot) + alias(libs.plugins.spring.dep.mgmt) } description = 'Reactive Spring Pulsar Sample Application' @@ -12,8 +12,16 @@ repositories { maven { url 'https://repo.spring.io/snapshot' } } +def versionCatalog = extensions.getByType(VersionCatalogsExtension).named("libs") +def pulsarVersion = versionCatalog.findVersion("pulsar").orElseThrow().displayName +def pulsarReactiveVersion = versionCatalog.findVersion("pulsar-reactive").orElseThrow().displayName + +ext['spring-pulsar.version'] = "${project.version}" +ext['pulsar.version'] = "${pulsarVersion}" +ext['pulsar-reactive.version'] = "${pulsarReactiveVersion}" + dependencies { - implementation "org.springframework.boot:spring-boot-starter-pulsar-reactive:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-pulsar-reactive" } test { diff --git a/spring-pulsar/spring-pulsar.gradle b/spring-pulsar/spring-pulsar.gradle index 4ce24a27..95a3a6ae 100644 --- a/spring-pulsar/spring-pulsar.gradle +++ b/spring-pulsar/spring-pulsar.gradle @@ -6,7 +6,7 @@ description = 'Spring Pulsar Core' dependencies { api 'io.micrometer:micrometer-observation' - api ('org.apache.pulsar:pulsar-client-all') { + api (libs.pulsar.client.all) { exclude group: 'org.apache.logging.log4j' exclude group: 'com.sun.activation', module: 'javax.activation' exclude group: 'javax.validation', module: 'validation-api' @@ -14,22 +14,21 @@ dependencies { api 'org.springframework:spring-context' api 'org.springframework:spring-messaging' api 'org.springframework:spring-tx' - api ('org.springframework.retry:spring-retry') { + api (libs.spring.retry) { exclude group: 'org.springframework' } api project(':spring-pulsar-cache-provider') implementation project(path: ':spring-pulsar-cache-provider-caffeine', configuration: 'shadow') implementation 'com.fasterxml.jackson.core:jackson-core' implementation 'com.fasterxml.jackson.core:jackson-databind' - implementation 'com.google.code.findbugs:jsr305' + implementation libs.jsr305 + optional libs.protobuf.java + optional libs.json.path optional 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8' optional 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' optional 'com.fasterxml.jackson.datatype:jackson-datatype-joda' - optional 'com.google.protobuf:protobuf-java' - optional 'com.jayway.jsonpath:json-path' testImplementation project(':spring-pulsar-test') - testRuntimeOnly 'ch.qos.logback:logback-classic' testImplementation 'io.micrometer:micrometer-observation-test' testImplementation 'io.micrometer:micrometer-tracing-bridge-brave' testImplementation 'io.micrometer:micrometer-tracing-test' @@ -40,7 +39,7 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter' testImplementation 'org.mockito:mockito-junit-jupiter' testImplementation 'org.springframework:spring-test' - // Output capture used by PulsarFunctionAdministrationTests - testImplementation group: 'com.github.stefanbirkner', name: 'system-lambda', version: '1.2.1' + testImplementation libs.system.lambda + testRuntimeOnly libs.logback.classic }