blob: 521b9ab5610699a1063e7ad5427cbee13327a987 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* License); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import groovy.json.JsonOutput
plugins { id 'org.apache.beam.module' }
applyJavaNature(
automaticModuleName: 'org.apache.beam.sdk.io.debezium',
mavenRepositories: [
[id: 'io.confluent', url: 'https://packages.confluent.io/maven/']
],
requireJavaVersion: JavaVersion.VERSION_17,
)
provideIntegrationTestingDependencies()
description = "Apache Beam :: SDKs :: Java :: IO :: Debezium"
ext.summary = "Library to work with Debezium data."
dependencies {
implementation library.java.vendored_guava_32_1_2_jre
implementation library.java.vendored_grpc_1_69_0
implementation project(path: ":sdks:java:core", configuration: "shadow")
implementation library.java.slf4j_api
implementation library.java.joda_time
// Explicitly declare Jackson dependencies
// and align with the 2.17.1 version.
implementation 'com.fasterxml.jackson.core:jackson-core:2.17.1'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.1'
permitUnusedDeclared 'com.fasterxml.jackson.core:jackson-core:2.17.1'
permitUnusedDeclared 'com.fasterxml.jackson.core:jackson-databind:2.17.1'
provided library.java.jackson_dataformat_csv
permitUnusedDeclared library.java.jackson_dataformat_csv
// Kafka connect dependencies
implementation "org.apache.kafka:connect-api:3.9.0"
// Debezium dependencies
implementation group: 'io.debezium', name: 'debezium-core', version: '3.1.1.Final'
// Test dependencies
testImplementation project(path: ":sdks:java:core", configuration: "shadowTest")
testImplementation project(path: ":sdks:java:io:common")
testImplementation library.java.junit
testImplementation project(path: ":sdks:java:io:jdbc")
testRuntimeOnly library.java.slf4j_jdk14
testRuntimeOnly project(path: ":runners:direct-java", configuration: "shadow")
testImplementation project(":runners:google-cloud-dataflow-java")
testImplementation library.java.hamcrest
testImplementation library.java.testcontainers_base
testImplementation "org.testcontainers:kafka"
testImplementation "org.testcontainers:mysql"
testImplementation "org.testcontainers:postgresql"
testImplementation "io.debezium:debezium-testing-testcontainers:3.1.1.Final"
testImplementation 'com.zaxxer:HikariCP:5.1.0'
// Debezium connector implementations for testing
testImplementation group: 'io.debezium', name: 'debezium-connector-mysql', version: '3.1.1.Final'
testImplementation group: 'io.debezium', name: 'debezium-connector-postgres', version: '3.1.1.Final'
}
// Pin the Antlr version to 4.10
// and force Jackson versions to 2.17.1
// TODO: Remove pin after upgrading Beam's Jackson version
// This overrides the global 2.15.4 forced by BeamModulePlugin.
configurations.all {
resolutionStrategy {
force 'org.antlr:antlr4:4.10',
'org.antlr:antlr4-runtime:4.10',
'com.fasterxml.jackson.core:jackson-core:2.17.1',
'com.fasterxml.jackson.core:jackson-annotations:2.17.1',
'com.fasterxml.jackson.core:jackson-databind:2.17.1',
'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1'
}
}
def configureTestJvmArgs(Task task) {
List<String> currentJvmArgs = task.jvmArgs ? new ArrayList<>(task.jvmArgs) : new ArrayList<>()
// Add standard opens required for Jackson, Afterburner, and other reflective frameworks
// when dealing with Java Modules or complex classloader scenarios.
currentJvmArgs.addAll([
'--add-opens=java.base/java.lang=ALL-UNNAMED',
'--add-opens=java.base/java.util=ALL-UNNAMED',
'--add-opens=java.base/java.util.concurrent=ALL-UNNAMED',
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED',
'--add-opens=java.base/java.io=ALL-UNNAMED',
'--add-opens=java.base/java.nio=ALL-UNNAMED',
'--add-opens=java.base/java.math=ALL-UNNAMED',
'--add-opens=java.base/java.time=ALL-UNNAMED', // For JSR310 types
])
task.jvmArgs = currentJvmArgs.unique() // Assign the new, filtered list back, removing duplicates
project.logger.lifecycle("Task ${task.name} final jvmArgs: ${task.jvmArgs.join(' ')}")
}
test {
testLogging {
outputs.upToDateWhen {false}
showStandardStreams = true
exceptionFormat = 'full'
}
configureTestJvmArgs(delegate)
}
task integrationTest(type: Test, dependsOn: processTestResources) {
group = "Verification"
systemProperty "beamTestPipelineOptions", JsonOutput.toJson([
"--runner=DirectRunner",
])
// Disable Gradle cache: these ITs interact with live service that should always be considered "out of date"
outputs.upToDateWhen { false }
include '**/*IT.class'
classpath = sourceSets.test.runtimeClasspath
testClassesDirs = sourceSets.test.output.classesDirs
useJUnit {
}
}