Files
spring-integration/build.gradle
Artem Bilan 4faa2ea680 Revert Hibernate version to 6.2.6.Final
It looks like in the latest Hibernate there is some fix
in the persistent context where provided entity is updated by the values from
DB.

We are going to address those failing JPA tests post-release
2023-09-19 14:05:21 -04:00

1314 lines
45 KiB
Groovy

buildscript {
ext.kotlinVersion = '1.8.10'
ext.isCI = System.getenv('GITHUB_ACTION') || System.getenv('bamboo_buildKey')
repositories {
gradlePluginPortal()
mavenCentral()
if (version.endsWith('SNAPSHOT')) {
maven { url 'https://repo.spring.io/snapshot' }
}
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion"
}
}
plugins {
id 'org.sonarqube' version '4.3.0.3225'
id 'io.spring.nohttp' version '0.0.11' apply false
id 'org.ajoberstar.grgit' version '4.1.1'
id 'io.spring.dependency-management' version '1.1.2'
id 'com.jfrog.artifactory' version '4.33.1' apply false
id 'org.jetbrains.dokka' version "$kotlinVersion"
id 'org.asciidoctor.jvm.pdf' version '3.3.2'
id 'org.asciidoctor.jvm.convert' version '3.3.2'
}
if (isCI) {
apply plugin: 'io.spring.nohttp'
nohttp {
source.include '**/src/**'
source.exclude '**/bin/**', '**/build/**', '**/out/**', '**/target/**', '**/*.gif', '**/*.jpg', '**/*.png', '**/*.svg', '**/*.ks'
}
}
description = 'Spring Integration'
ext {
linkHomepage = 'https://projects.spring.io/spring-integration'
linkCi = 'https://build.spring.io/browse/INT'
linkIssue = 'https://github.com/spring-projects/spring-integration/issues'
linkScmUrl = 'https://github.com/spring-projects/spring-integration'
linkScmConnection = 'scm:git:git://github.com/spring-projects/spring-integration.git'
linkScmDevConnection = 'scm:git:ssh://git@github.com:spring-projects/spring-integration.git'
modifiedFiles =
files(grgit.status().unstaged.modified).filter { f -> f.name.endsWith('.java') || f.name.endsWith('.kt') }
apacheSshdVersion = '2.9.2'
artemisVersion = '2.28.0'
aspectjVersion = '1.9.20.1'
assertjVersion = '3.24.2'
assertkVersion = '0.26.1'
avroVersion = '1.11.2'
awaitilityVersion = '4.2.0'
camelVersion = '3.20.6'
commonsDbcp2Version = '2.9.0'
commonsIoVersion = '2.11.0'
commonsNetVersion = '3.9.0'
curatorVersion = '5.5.0'
derbyVersion = '10.16.1.1'
findbugsVersion = '3.0.1'
ftpServerVersion = '1.2.0'
graalvmVersion = '22.3.3'
greenmailVersion = '2.0.0'
groovyVersion = '4.0.15'
hamcrestVersion = '2.2'
hazelcastVersion = '5.2.4'
hibernateVersion = '6.2.6.Final'
hsqldbVersion = '2.7.2'
h2Version = '2.2.224'
jacksonVersion = '2.15.2'
jaxbVersion = '4.0.3'
jcifsVersion = '2.1.36'
jeroMqVersion = '0.5.3'
jmsApiVersion = '3.1.0'
jpaApiVersion = '3.1.0'
jrubyVersion = '9.4.3.0'
jsonpathVersion = '2.8.0'
junit4Version = '4.13.2'
junitJupiterVersion = '5.9.3'
jythonVersion = '2.7.3'
kotlinCoroutinesVersion = '1.6.4'
kryoVersion = '5.5.0'
lettuceVersion = '6.2.4.RELEASE'
log4jVersion = '2.20.0'
mailVersion = '1.0.0'
micrometerTracingVersion = '1.1.5'
micrometerVersion = '1.11.4'
mockitoVersion = '5.3.1'
mongoDriverVersion = '4.9.1'
mysqlVersion = '8.0.33'
pahoMqttClientVersion = '1.2.5'
postgresVersion = '42.6.0'
protobufVersion = '3.23.4'
r2dbch2Version = '1.0.0.RELEASE'
reactorVersion = '2022.0.11'
resilience4jVersion = '2.0.2'
romeToolsVersion = '2.1.0'
rsocketVersion = '1.1.4'
servletApiVersion = '6.0.0'
smackVersion = '4.4.6'
springAmqpVersion = '3.0.9'
springDataVersion = '2023.0.4'
springGraphqlVersion = '1.2.3'
springKafkaVersion = '3.0.11'
springRetryVersion = '2.0.3'
springSecurityVersion = '6.1.4'
springVersion = '6.0.12'
springWsVersion = '4.0.6'
testcontainersVersion = '1.19.0'
tomcatVersion = '10.1.13'
xmlUnitVersion = '2.9.1'
xstreamVersion = '1.4.20'
ztZipVersion = '1.16'
javaProjects = subprojects - project(':spring-integration-bom')
}
allprojects {
group = 'org.springframework.integration'
repositories {
if (project.hasProperty('mavenLocal')) {
mavenLocal()
}
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
if (version.endsWith('SNAPSHOT')) {
maven { url 'https://repo.spring.io/snapshot' }
}
// maven { url 'https://repo.spring.io/libs-staging-local' }
}
ext.javadocLinks = [
'https://docs.oracle.com/en/java/javase/17/docs/api/',
'https://jakarta.ee/specifications/platform/10/apidocs/',
'https://docs.spring.io/spring-framework/docs/current/javadoc-api',
'https://docs.spring.io/spring-amqp/docs/current/api/',
'https://docs.spring.io/spring-data/data-mongo/docs/current/api/',
'https://docs.spring.io/spring-data/data-redis/docs/current/api/',
'https://docs.spring.io/spring-ws/docs/current/api/'
] as String[]
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
resolutionStrategy {
cacheChangingModulesFor 0, 'seconds'
}
applyMavenExclusions = false
generatedPomCustomization {
enabled = false
}
imports {
mavenBom "com.fasterxml.jackson:jackson-bom:$jacksonVersion"
mavenBom "org.junit:junit-bom:$junitJupiterVersion"
mavenBom "io.projectreactor:reactor-bom:$reactorVersion"
mavenBom "org.apache.logging.log4j:log4j-bom:$log4jVersion"
mavenBom "org.mockito:mockito-bom:$mockitoVersion"
mavenBom "io.micrometer:micrometer-bom:$micrometerVersion"
mavenBom "io.micrometer:micrometer-tracing-bom:$micrometerTracingVersion"
mavenBom "org.apache.camel:camel-bom:$camelVersion"
mavenBom "org.testcontainers:testcontainers-bom:$testcontainersVersion"
mavenBom "org.apache.groovy:groovy-bom:$groovyVersion"
mavenBom "org.springframework.security:spring-security-bom:$springSecurityVersion"
mavenBom "org.jetbrains.kotlinx:kotlinx-coroutines-bom:$kotlinCoroutinesVersion"
mavenBom "org.springframework.amqp:spring-amqp-bom:$springAmqpVersion"
mavenBom "org.springframework.kafka:spring-kafka-bom:$springKafkaVersion"
mavenBom "org.springframework.data:spring-data-bom:$springDataVersion"
mavenBom "org.springframework:spring-framework-bom:$springVersion"
mavenBom "org.springframework.ws:spring-ws-bom:$springWsVersion"
}
}
}
configure(javaProjects) { subproject ->
apply plugin: 'java-library'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'jacoco'
apply plugin: 'checkstyle'
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply from: "${rootDir}/gradle/publish-maven.gradle"
sourceSets {
test {
resources {
srcDirs = ['src/test/resources', 'src/test/java']
}
}
}
java {
withJavadocJar()
withSourcesJar()
registerFeature('optional') {
usingSourceSet(sourceSets.main)
}
registerFeature('provided') {
usingSourceSet(sourceSets.main)
}
}
compileJava {
options.release = 17
}
compileTestJava {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
options.encoding = 'UTF-8'
}
compileKotlin {
kotlinOptions {
languageVersion = '1.7'
apiVersion = '1.7'
allWarningsAsErrors = true
}
}
tasks.withType(JavaCompile).configureEach {
options.fork = true
}
tasks.withType(Javadoc) {
options.addBooleanOption('Xdoclint:syntax', true) // only check syntax with doclint
options.addBooleanOption('Werror', true) // fail build on Javadoc warnings
}
eclipse {
project {
natures += 'org.springframework.ide.eclipse.core.springnature'
}
}
jacoco {
toolVersion = '0.8.10'
}
// dependencies that are common across all java projects
dependencies {
if (!(subproject.name ==~ /.*-test.*/)) {
testImplementation(project(':spring-integration-test-support')) {
exclude group: 'org.hamcrest'
}
}
// JSR-305 only used for non-required meta-annotations
compileOnly "com.google.code.findbugs:annotations:$findbugsVersion"
testImplementation "com.google.code.findbugs:annotations:$findbugsVersion"
testImplementation("org.awaitility:awaitility:$awaitilityVersion") {
exclude group: 'org.hamcrest'
}
testImplementation("junit:junit:$junit4Version") {
exclude group: 'org.hamcrest'
}
testImplementation 'org.junit.jupiter:junit-jupiter-api'
testImplementation 'org.junit.jupiter:junit-jupiter-params'
testImplementation("com.willowtreeapps.assertk:assertk-jvm:$assertkVersion") {
exclude group: 'org.jetbrains.kotlin'
}
testImplementation 'org.jetbrains.kotlin:kotlin-reflect'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
testImplementation 'io.projectreactor:reactor-test'
testImplementation 'org.testcontainers:junit-jupiter'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
// To support JUnit 4 tests
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
testRuntimeOnly 'org.apache.logging.log4j:log4j-core'
testRuntimeOnly 'org.apache.logging.log4j:log4j-jcl'
testRuntimeOnly 'org.apache.logging.log4j:log4j-slf4j-impl'
testRuntimeOnly 'org.apache.logging.log4j:log4j-slf4j2-impl'
}
// enable all compiler warnings; individual projects may customize further
ext.xLintArg = '-Xlint:all,-options,-processing'
[compileJava, compileTestJava]*.options*.compilerArgs = [xLintArg, '-parameters']
task updateCopyrights {
onlyIf { !isCI }
inputs.files(modifiedFiles.filter { f -> f.path.contains(subproject.name) })
outputs.dir('build/classes')
doLast {
def now = Calendar.instance.get(Calendar.YEAR) as String
inputs.files.each { file ->
def line
file.withReader { reader ->
while (line = reader.readLine()) {
def matcher = line =~ /Copyright (20\d\d)-?(20\d\d)?/
if (matcher.count) {
def beginningYear = matcher[0][1]
if (now != beginningYear && now != matcher[0][2]) {
def years = "$beginningYear-$now"
def sourceCode = file.text
sourceCode = sourceCode.replaceFirst(/20\d\d(-20\d\d)?/, years)
file.text = sourceCode
println "Copyright updated for file: $file"
}
break
}
}
}
}
}
}
compileKotlin.dependsOn updateCopyrights
jacocoTestReport {
onlyIf { System.properties['sonar.host.url'] }
dependsOn test
reports {
xml.required = true
html.required = false
}
}
rootProject.tasks['sonarqube'].dependsOn jacocoTestReport
test {
maxHeapSize = '2g'
jvmArgs '-XX:+HeapDumpOnOutOfMemoryError'
jacoco {
destinationFile = file("$buildDir/jacoco.exec")
}
}
task testAll(type: Test, dependsOn: [':checkAsciidocLinks', 'check'])
gradle.taskGraph.whenReady { graph ->
if (graph.hasTask(testAll)) {
test.enabled = false
}
}
tasks.withType(Test).all {
// suppress all console output during testing unless running `gradle -i`
logging.captureStandardOutput(LogLevel.INFO)
if (name ==~ /(testAll)/) {
systemProperty 'RUN_LONG_INTEGRATION_TESTS', 'true'
}
environment 'SI_FATAL_WHEN_NO_BEANFACTORY', 'true'
useJUnitPlatform()
enableAssertions = false
}
checkstyle {
configDirectory.set(rootProject.file('src/checkstyle'))
toolVersion = project.hasProperty('checkstyleVersion') ? project.checkstyleVersion : '10.12.1'
}
jar {
manifest {
attributes(
'Implementation-Version': project.version,
'Created-By': "JDK ${System.properties['java.version']} (${System.properties['java.specification.vendor']})",
'Implementation-Title': subproject.name,
'Implementation-Vendor-Id': subproject.group,
'Implementation-Vendor': 'Pivotal Software, Inc.',
'Implementation-URL': linkHomepage,
'Automatic-Module-Name': subproject.name.replace('-', '.') // for Jigsaw
)
}
from("${rootProject.projectDir}/src/dist") {
include 'notice.txt'
into 'META-INF'
expand(copyright: new Date().format('yyyy'), version: project.version)
}
from("${rootProject.projectDir}") {
include 'LICENSE.txt'
into 'META-INF'
}
}
task checkClasspathForConflicts {
onlyIf { isCI }
inputs.files(configurations.runtimeClasspath)
def ignored = ['module-info.class']
def errors = ['Found classpath conflicts:\n']
Map<String, Set<String>> classpathContents = [:]
doLast {
inputs.files.each { file ->
new java.util.jar.JarFile(file)
.stream()
.filter { !it.name.startsWith('META-INF/') && it.name.endsWith('.class') && !ignored.contains(it.name) }
.each { classpathContents.computeIfAbsent(it.name, { [] as Set }).add(file.absolutePath) }
}
def conflicts = classpathContents.findAll { it.value.size() > 1 }
conflicts.each {
errors += " $it.key\n"
it.value.each {
errors += " $it\n"
}
}
if (errors.size() > 1) {
throw new InvalidUserDataException(errors.toString().replaceAll(~/,\s/, '') - '[' - ']')
}
}
}
check.dependsOn checkClasspathForConflicts, javadoc
publishing {
publications {
mavenJava(MavenPublication) {
suppressAllPomMetadataWarnings()
from components.java
pom.withXml {
def pomDeps = asNode().dependencies.first()
subproject.configurations.providedImplementation.allDependencies.each { dep ->
pomDeps.remove(pomDeps.'*'.find { it.artifactId.text() == dep.name })
pomDeps.appendNode('dependency').with {
it.appendNode('groupId', dep.group)
it.appendNode('artifactId', dep.name)
it.appendNode('version', dep.version)
it.appendNode('scope', 'provided')
}
}
}
}
}
}
}
project('spring-integration-test-support') {
description = 'Spring Integration Test Support - **No SI Dependencies Allowed**'
dependencies {
compileOnly 'org.apiguardian:apiguardian-api:1.0.0'
api "org.hamcrest:hamcrest-library:$hamcrestVersion"
api 'org.mockito:mockito-core'
api "org.assertj:assertj-core:$assertjVersion"
api 'org.springframework:spring-context'
api 'org.springframework:spring-messaging'
api 'org.springframework:spring-test'
optionalApi("junit:junit:$junit4Version") {
exclude group: 'org.hamcrest'
}
optionalApi 'org.junit.jupiter:junit-jupiter-api'
optionalApi 'org.apache.logging.log4j:log4j-core'
}
}
project('spring-integration-amqp') {
description = 'Spring Integration AMQP Support'
dependencies {
api project(':spring-integration-core')
api('org.springframework.amqp:spring-rabbit') {
exclude group: 'org.springframework'
}
optionalApi('org.springframework.amqp:spring-rabbit-stream') {
exclude group: 'org.springframework'
}
testImplementation('org.springframework.amqp:spring-rabbit-junit') {
exclude group: 'org.springframework'
}
testImplementation project(':spring-integration-stream')
testImplementation 'org.springframework:spring-web'
testImplementation 'org.testcontainers:rabbitmq'
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-camel') {
description = 'Spring Integration support for Apache Camel'
dependencies {
api project(':spring-integration-core')
api 'org.apache.camel:camel-core-model'
testImplementation 'org.apache.camel:camel-test-junit5'
testImplementation ('org.apache.camel:camel-spring') {
exclude group: 'org.springframework'
}
}
}
project('spring-integration-cassandra') {
description = 'Spring Integration Support for Apache Cassandra'
dependencies {
api project(':spring-integration-core')
api 'org.springframework.data:spring-data-cassandra'
testImplementation 'org.testcontainers:cassandra'
}
}
project('spring-integration-core') {
description = 'Spring Integration Core'
apply plugin: 'org.jetbrains.dokka'
dependencies {
api 'org.springframework:spring-aop'
api 'org.springframework:spring-context'
api 'org.springframework:spring-messaging'
api 'org.springframework:spring-tx'
api("org.springframework.retry:spring-retry:$springRetryVersion") {
exclude group: 'org.springframework'
}
api 'io.projectreactor:reactor-core'
api 'io.micrometer:micrometer-observation'
optionalApi 'com.fasterxml.jackson.core:jackson-databind'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
optionalApi 'com.fasterxml.jackson.datatype:jackson-datatype-joda'
optionalApi('com.fasterxml.jackson.module:jackson-module-kotlin') {
exclude group: 'org.jetbrains.kotlin'
}
optionalApi "com.google.protobuf:protobuf-java:$protobufVersion"
optionalApi "com.jayway.jsonpath:json-path:$jsonpathVersion"
optionalApi "com.esotericsoftware:kryo:$kryoVersion"
optionalApi 'io.micrometer:micrometer-core'
optionalApi ('io.micrometer:micrometer-tracing') {
exclude group: 'aopalliance'
}
optionalApi "io.github.resilience4j:resilience4j-ratelimiter:$resilience4jVersion"
optionalApi "org.apache.avro:avro:$avroVersion"
optionalApi 'org.jetbrains.kotlinx:kotlinx-coroutines-reactor'
testImplementation "com.google.protobuf:protobuf-java-util:$protobufVersion"
testImplementation "org.aspectj:aspectjweaver:$aspectjVersion"
testImplementation 'io.micrometer:micrometer-observation-test'
testImplementation ('io.micrometer:micrometer-tracing-integration-test') {
exclude group: 'io.opentelemetry'
exclude group: 'com.wavefront'
exclude group: 'io.micrometer', module: 'micrometer-tracing-bridge-otel'
}
}
dokkaHtmlPartial {
outputDirectory.set(new File(buildDir, 'kdoc'))
dokkaSourceSets {
main {
sourceRoots.setFrom(file('src/main/kotlin'))
classpath.from(sourceSets['main'].runtimeClasspath)
externalDocumentationLink {
url.set(new URL("https://docs.spring.io/spring-integration/docs/$version/api/"))
packageListUrl.set(file("$buildDir/docs/javadoc/element-list").toURI().toURL())
}
externalDocumentationLink {
url.set(new URL('https://projectreactor.io/docs/core/release/api/'))
}
externalDocumentationLink {
url.set(new URL('https://www.reactive-streams.org/reactive-streams-1.0.3-javadoc/'))
}
}
}
}
}
project('spring-integration-event') {
description = 'Spring Integration ApplicationEvent Support'
dependencies {
api project(':spring-integration-core')
}
}
project('spring-integration-feed') {
description = 'Spring Integration RSS Feed Support'
dependencies {
api project(':spring-integration-core')
api "com.rometools:rome:$romeToolsVersion"
}
}
project('spring-integration-file') {
description = 'Spring Integration File Support'
dependencies {
api project(':spring-integration-core')
api "commons-io:commons-io:$commonsIoVersion"
testImplementation project(':spring-integration-redis')
testImplementation project(':spring-integration-redis').sourceSets.test.output
testImplementation project(':spring-integration-jdbc')
testImplementation "com.h2database:h2:$h2Version"
testImplementation "io.lettuce:lettuce-core:$lettuceVersion"
testImplementation "com.jayway.jsonpath:json-path:$jsonpathVersion"
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-ftp') {
description = 'Spring Integration FTP Support'
dependencies {
api project(':spring-integration-file')
api "commons-net:commons-net:$commonsNetVersion"
api 'org.springframework:spring-context-support'
optionalApi "org.apache.ftpserver:ftpserver-core:$ftpServerVersion"
testImplementation project(':spring-integration-file').sourceSets.test.output
}
}
project('spring-integration-graphql') {
description = 'Spring Integration GraphQL Support'
dependencies {
api project(':spring-integration-core')
api "org.springframework.graphql:spring-graphql:$springGraphqlVersion"
testImplementation 'org.springframework:spring-web'
}
}
project('spring-integration-groovy') {
description = 'Spring Integration Groovy Support'
apply plugin: 'groovy'
dependencies {
api project(':spring-integration-scripting')
api 'org.apache.groovy:groovy'
api 'org.springframework:spring-context-support'
testImplementation 'org.springframework:spring-web'
testRuntimeOnly 'org.apache.groovy:groovy-dateutil'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.base/java.util=ALL-UNNAMED'
}
}
project('spring-integration-hazelcast') {
description = 'Spring Integration Hazelcast Support'
dependencies {
api project(':spring-integration-core')
api "com.hazelcast:hazelcast:$hazelcastVersion"
testImplementation project(':spring-integration-jmx')
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-modules', 'java.se',
'--add-exports', 'java.base/jdk.internal.ref=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED',
'--add-opens', 'java.management/sun.management=ALL-UNNAMED',
'--add-opens', 'jdk.management/com.sun.management.internal=ALL-UNNAMED',
'-Dhazelcast.logging.type=log4j2'
}
}
project('spring-integration-http') {
description = 'Spring Integration HTTP Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-webmvc'
providedImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
optionalApi "com.rometools:rome:$romeToolsVersion"
optionalApi 'org.springframework:spring-webflux'
testImplementation project(':spring-integration-security')
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
testImplementation('org.springframework.security:spring-security-config') {
exclude group: 'org.springframework'
}
testImplementation('org.springframework.security:spring-security-test') {
exclude group: 'org.springframework'
}
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
testRuntimeOnly "com.jayway.jsonpath:json-path:$jsonpathVersion"
}
}
project('spring-integration-ip') {
description = 'Spring Integration IP Support'
dependencies {
api project(':spring-integration-core')
testImplementation project(':spring-integration-stream')
testImplementation project(':spring-integration-event')
testRuntimeOnly "com.esotericsoftware:kryo:$kryoVersion"
testRuntimeOnly 'com.fasterxml.jackson.core:jackson-databind'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.nio.channels.spi=ALL-UNNAMED',
'--add-opens', 'java.base/java.util=ALL-UNNAMED'
}
}
project('spring-integration-jdbc') {
description = 'Spring Integration JDBC Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-jdbc'
optionalApi "org.postgresql:postgresql:$postgresVersion"
testImplementation "com.h2database:h2:$h2Version"
testImplementation "org.hsqldb:hsqldb:$hsqldbVersion"
testImplementation "org.apache.derby:derby:$derbyVersion"
testImplementation "org.apache.derby:derbytools:$derbyVersion"
testImplementation "org.apache.derby:derbyclient:$derbyVersion"
testImplementation "org.postgresql:postgresql:$postgresVersion"
testImplementation "mysql:mysql-connector-java:$mysqlVersion"
testImplementation "org.apache.commons:commons-dbcp2:$commonsDbcp2Version"
testImplementation 'org.testcontainers:mysql'
testImplementation 'org.testcontainers:postgresql'
testRuntimeOnly 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-jms') {
description = 'Spring Integration JMS Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-jms'
providedImplementation "jakarta.jms:jakarta.jms-api:$jmsApiVersion"
testImplementation("org.apache.activemq:artemis-server:$artemisVersion") {
exclude group: 'org.jboss.logmanager'
}
testImplementation "org.apache.activemq:artemis-jakarta-client:$artemisVersion"
testImplementation 'org.springframework:spring-oxm'
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
testImplementation 'io.micrometer:micrometer-observation-test'
}
}
project('spring-integration-jmx') {
description = 'Spring Integration JMX Support'
dependencies {
api project(':spring-integration-core')
testImplementation "org.aspectj:aspectjweaver:$aspectjVersion"
}
}
project('spring-integration-jpa') {
description = 'Spring Integration JPA Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-orm'
optionalApi "jakarta.persistence:jakarta.persistence-api:$jpaApiVersion"
testImplementation('org.springframework.data:spring-data-jpa') {
exclude group: 'org.springframework'
}
testImplementation "com.h2database:h2:$h2Version"
testImplementation "org.hibernate.orm:hibernate-core:$hibernateVersion"
}
}
project('spring-integration-kafka') {
description = 'Spring Integration for Apache Kafka'
dependencies {
api project(':spring-integration-core')
api('org.springframework.kafka:spring-kafka') {
exclude group: 'org.springframework'
}
testImplementation 'org.springframework.kafka:spring-kafka-test'
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-mail') {
description = 'Spring Integration Mail Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-context-support'
providedImplementation "org.eclipse.angus:jakarta.mail:$mailVersion"
testImplementation ("com.icegreen:greenmail:$greenmailVersion") {
exclude group: 'com.sun.mail'
exclude group: 'jakarta.activation'
}
testRuntimeOnly 'org.apache.logging.log4j:log4j-jul'
}
}
project('spring-integration-mongodb') {
description = 'Spring Integration MongoDB Support'
dependencies {
api project(':spring-integration-core')
api('org.springframework.data:spring-data-mongodb') {
exclude group: 'org.springframework'
}
optionalApi "org.mongodb:mongodb-driver-sync:$mongoDriverVersion"
optionalApi "org.mongodb:mongodb-driver-reactivestreams:$mongoDriverVersion"
testImplementation 'org.testcontainers:mongodb'
}
}
project('spring-integration-r2dbc') {
description = 'Spring Integration R2DBC Support'
dependencies {
api project(':spring-integration-core')
api('org.springframework.data:spring-data-r2dbc') {
exclude group: 'org.springframework'
}
api 'org.springframework:spring-r2dbc'
testImplementation "io.r2dbc:r2dbc-h2:$r2dbch2Version"
}
}
project('spring-integration-mqtt') {
description = 'Spring Integration MQTT Support'
dependencies {
api project(':spring-integration-core')
api "org.eclipse.paho:org.eclipse.paho.client.mqttv3:$pahoMqttClientVersion"
optionalApi "org.eclipse.paho:org.eclipse.paho.mqttv5.client:$pahoMqttClientVersion"
testImplementation project(':spring-integration-jmx')
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-redis') {
description = 'Spring Integration Redis Support'
dependencies {
api project(':spring-integration-core')
api('org.springframework.data:spring-data-redis') {
exclude group: 'org.springframework'
}
testImplementation "io.lettuce:lettuce-core:$lettuceVersion"
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.util=ALL-UNNAMED'
}
}
project('spring-integration-rsocket') {
description = 'Spring Integration RSocket Support'
dependencies {
api project(':spring-integration-core')
api "io.rsocket:rsocket-transport-netty:$rsocketVersion"
}
}
project('spring-integration-scripting') {
description = 'Spring Integration Scripting Support'
dependencies {
api project(':spring-integration-core')
optionalApi ('org.jetbrains.kotlin:kotlin-script-util') {
exclude group: 'org.jetbrains.kotlin', module: 'kotlin-daemon-client'
}
optionalApi 'org.jetbrains.kotlin:kotlin-compiler-embeddable'
providedImplementation "org.graalvm.sdk:graal-sdk:$graalvmVersion"
providedImplementation "org.graalvm.js:js:$graalvmVersion"
testImplementation "org.jruby:jruby-complete:$jrubyVersion"
testImplementation 'org.apache.groovy:groovy-jsr223'
testImplementation "org.python:jython-standalone:$jythonVersion"
testRuntimeOnly 'org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/sun.nio.ch=ALL-UNNAMED',
'--add-opens', 'java.base/java.io=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.base/java.util=ALL-UNNAMED'
}
}
project('spring-integration-security') {
description = 'Spring Integration Security Support'
dependencies {
api project(':spring-integration-core')
api('org.springframework.security:spring-security-messaging') {
exclude group: 'org.springframework'
}
testImplementation('org.springframework.security:spring-security-config') {
exclude group: 'org.springframework'
}
}
}
project('spring-integration-sftp') {
description = 'Spring Integration SFTP Support'
dependencies {
api project(':spring-integration-file')
api 'org.springframework:spring-context-support'
api ("org.apache.sshd:sshd-sftp:$apacheSshdVersion") {
exclude group: 'org.slf4j', module: 'jcl-over-slf4j'
}
testImplementation project(':spring-integration-event')
testImplementation project(':spring-integration-file').sourceSets.test.output
}
}
project('spring-integration-smb') {
description = 'Spring Integration SMB Support'
dependencies {
api project(':spring-integration-file')
api "org.codelibs:jcifs:$jcifsVersion"
testImplementation project(':spring-integration-file').sourceSets.test.output
}
}
project('spring-integration-stomp') {
description = 'Spring Integration STOMP Support'
dependencies {
api project(':spring-integration-core')
optionalApi 'org.springframework:spring-websocket'
testImplementation project(':spring-integration-websocket')
testImplementation project(':spring-integration-websocket').sourceSets.test.output
testImplementation project(':spring-integration-event')
testImplementation("org.apache.activemq:artemis-stomp-protocol:$artemisVersion") {
exclude group: 'org.jboss.logmanager'
}
testImplementation "org.apache.tomcat.embed:tomcat-embed-websocket:$tomcatVersion"
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
testRuntimeOnly 'org.springframework:spring-webmvc'
testRuntimeOnly 'io.projectreactor.netty:reactor-netty-http'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.io=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.rmi/sun.rmi.transport=ALL-UNNAMED'
}
}
project('spring-integration-stream') {
description = 'Spring Integration Stream Support'
dependencies {
api project(':spring-integration-core')
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.io=ALL-UNNAMED'
}
}
project('spring-integration-syslog') {
description = 'Spring Integration Syslog Support'
dependencies {
api project(':spring-integration-ip')
}
}
project('spring-integration-test') {
description = 'Spring Integration Testing Framework'
dependencies {
api project(':spring-integration-core')
api project(':spring-integration-test-support')
}
}
project('spring-integration-webflux') {
description = 'Spring Integration HTTP Support'
dependencies {
api(project(':spring-integration-http')) {
exclude group: 'org.springframework', module: 'spring-webmvc'
}
api 'org.springframework:spring-webflux'
optionalApi 'io.projectreactor.netty:reactor-netty-http'
testImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
testImplementation "org.hamcrest:hamcrest-core:$hamcrestVersion"
testImplementation 'org.springframework:spring-webmvc'
testImplementation('org.springframework.security:spring-security-config') {
exclude group: 'org.springframework'
}
testImplementation('org.springframework.security:spring-security-test') {
exclude group: 'org.springframework'
}
testImplementation 'com.fasterxml.jackson.core:jackson-databind'
testImplementation 'io.micrometer:micrometer-observation-test'
testImplementation ('io.micrometer:micrometer-tracing-integration-test') {
exclude group: 'io.opentelemetry'
exclude group: 'com.wavefront'
exclude group: 'io.micrometer', module: 'micrometer-tracing-bridge-otel'
}
testRuntimeOnly "com.jayway.jsonpath:json-path:$jsonpathVersion"
}
}
project('spring-integration-websocket') {
description = 'Spring Integration WebSockets Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-websocket'
optionalApi 'org.springframework:spring-webmvc'
providedImplementation "jakarta.servlet:jakarta.servlet-api:$servletApiVersion"
testImplementation project(':spring-integration-event')
testImplementation "org.apache.tomcat.embed:tomcat-embed-websocket:$tomcatVersion"
testRuntimeOnly 'com.fasterxml.jackson.core:jackson-databind'
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.base/java.io=ALL-UNNAMED',
'--add-opens', 'java.base/java.lang=ALL-UNNAMED',
'--add-opens', 'java.rmi/sun.rmi.transport=ALL-UNNAMED'
}
}
project('spring-integration-ws') {
description = 'Spring Integration Web Services Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-oxm'
api 'org.springframework:spring-webmvc'
api('org.springframework.ws:spring-ws-core') {
exclude group: 'org.springframework'
exclude group: 'org.glassfish.jaxb'
}
providedImplementation "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
testImplementation "com.thoughtworks.xstream:xstream:$xstreamVersion"
testImplementation('org.springframework.ws:spring-ws-support') {
exclude group: 'org.springframework'
}
testImplementation 'org.springframework:spring-jms'
testImplementation "jakarta.jms:jakarta.jms-api:$jmsApiVersion"
testImplementation "org.igniterealtime.smack:smack-tcp:$smackVersion"
testImplementation "org.igniterealtime.smack:smack-extensions:$smackVersion"
testImplementation "org.eclipse.angus:angus-mail:$mailVersion"
}
}
project('spring-integration-xml') {
description = 'Spring Integration XML Support'
dependencies {
api project(':spring-integration-core')
api 'org.springframework:spring-oxm'
api('org.springframework.ws:spring-xml') {
exclude group: 'org.springframework'
}
optionalApi('org.springframework.ws:spring-ws-core') {
exclude group: 'org.springframework'
}
testImplementation "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
testImplementation "org.xmlunit:xmlunit-assertj3:$xmlUnitVersion"
}
tasks.withType(JavaForkOptions) {
jvmArgs '--add-opens', 'java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED'
}
}
project('spring-integration-xmpp') {
description = 'Spring Integration XMPP Support'
dependencies {
api project(':spring-integration-core')
api "org.igniterealtime.smack:smack-tcp:$smackVersion"
api "org.igniterealtime.smack:smack-java8:$smackVersion"
api "org.igniterealtime.smack:smack-extensions:$smackVersion"
testImplementation project(':spring-integration-stream')
testImplementation "org.igniterealtime.smack:smack-experimental:$smackVersion"
}
}
project('spring-integration-zeromq') {
description = 'Spring Integration ZeroMQ Support'
dependencies {
api project(':spring-integration-core')
api "org.zeromq:jeromq:$jeroMqVersion"
optionalApi 'com.fasterxml.jackson.core:jackson-databind'
}
}
project('spring-integration-zip') {
description = 'Spring Integration Zip Support'
dependencies {
api project(':spring-integration-file')
api "org.zeroturnaround:zt-zip:$ztZipVersion"
}
}
project('spring-integration-zookeeper') {
description = 'Spring Integration Zookeeper Support'
dependencies {
api project(':spring-integration-core')
api "org.apache.curator:curator-recipes:$curatorVersion"
testImplementation "org.apache.curator:curator-test:$curatorVersion"
}
}
project('spring-integration-bom') {
description = 'Spring Integration (Bill of Materials)'
apply plugin: 'java-platform'
apply from: "${rootDir}/gradle/publish-maven.gradle"
dependencies {
constraints {
javaProjects.sort { "$it.name" }.each {
api it
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.javaPlatform
}
}
}
sonar {
skipProject = true
}
}
sonar {
properties {
property 'sonar.links.homepage', linkHomepage
property 'sonar.links.ci', linkCi
property 'sonar.links.issue', linkIssue
property 'sonar.links.scm', linkScmUrl
property 'sonar.links.scm_dev', linkScmDevConnection
}
}
task api(type: Javadoc) {
group = 'Documentation'
description = 'Generates aggregated Javadoc API documentation.'
title = "${rootProject.description} ${version} API"
options {
encoding = 'UTF-8'
memberLevel = JavadocMemberLevel.PROTECTED
author = true
header = rootProject.description
use = true
overview = 'src/api/overview.html'
splitIndex = true
links(project.ext.javadocLinks)
addBooleanOption('Xdoclint:syntax', true) // only check syntax with doclint
}
source javaProjects.collect { project ->
project.sourceSets.main.allJava
}
destinationDir = new File(buildDir, 'api')
classpath = files(javaProjects.collect { project ->
project.sourceSets.main.compileClasspath
})
}
dokkaHtmlMultiModule {
dependsOn api
moduleName.set('spring-integration')
outputDirectory.set(file("$buildDir/kdoc"))
}
apply from: "${rootDir}/gradle/docs.gradle"
task schemaZip(type: Zip) {
group = 'Distribution'
archiveClassifier = 'schema'
description = "Builds -${archiveClassifier} archive containing all " +
"XSDs for deployment at static.springframework.org/schema."
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
javaProjects.each { subproject ->
Properties schemas = new Properties()
def shortName = subproject.name.replaceFirst("${rootProject.name}-", '')
if (subproject.name.endsWith('-core')) {
shortName = ''
}
subproject.sourceSets.main.resources.find {
it.path.endsWith("META-INF${File.separator}spring.schemas")
}?.withInputStream { schemas.load(it) }
for (def key : schemas.keySet()) {
File xsdFile = subproject.sourceSets.main.resources.find {
it.path.replaceAll('\\\\', '/').endsWith(schemas.get(key))
}
assert xsdFile != null
into("integration/$shortName") {
from xsdFile.path
rename { String fileName ->
String[] versionNumbers = project.version.split(/\./, 3)
fileName.replace('.xsd', "-${versionNumbers[0]}.${versionNumbers[1]}.xsd")
}
}
}
}
}
task docsZip(type: Zip, dependsOn: [reference, dokkaHtmlMultiModule]) {
group = 'Distribution'
archiveClassifier = 'docs'
description = "Builds -${archiveClassifier} archive containing api and reference " +
"for deployment at static.springframework.org/spring-integration/docs."
from('src/dist') {
include 'changelog.txt'
}
from(api) {
into 'api'
}
from('build/docs/asciidoc') {
into 'reference/html'
}
from('build/docs/asciidocPdf') {
include 'index-single.pdf'
rename 'index-single.pdf', 'spring-integration-reference.pdf'
into 'reference/pdf'
}
from(dokkaHtmlMultiModule.outputDirectory) {
into 'kdoc-api'
}
}
task distZip(type: Zip, dependsOn: [docsZip, schemaZip]) {
group = 'Distribution'
archiveClassifier = 'dist'
description = "Builds -${archiveClassifier} archive, containing all jars and docs, " +
"suitable for community download page."
ext.baseDir = "${project.name}-${project.version}"
from('src/dist') {
include 'readme.txt'
include 'notice.txt'
into "${baseDir}"
expand(copyright: new Date().format('yyyy'), version: project.version)
}
from("$project.rootDir") {
include 'LICENSE.txt'
into "${baseDir}"
}
from(zipTree(docsZip.archiveFile)) {
into "${baseDir}/docs"
}
from(zipTree(schemaZip.archiveFile)) {
into "${baseDir}/schema"
}
javaProjects.each { subproject ->
into("${baseDir}/libs") {
from subproject.jar
from subproject.sourcesJar
from subproject.javadocJar
}
}
from(project(':spring-integration-bom').generatePomFileForMavenJavaPublication) {
into "${baseDir}/libs"
rename 'pom-default.xml', "spring-integration-bom-${project.version}.xml"
}
}
task dist(dependsOn: assemble) {
group = 'Distribution'
description = 'Builds -dist, -docs and -schema distribution archives.'
}
apply from: "${rootDir}/gradle/publish-maven.gradle"
publishing {
publications {
mavenJava(MavenPublication) {
artifact docsZip
artifact schemaZip
artifact distZip
}
}
}