This is an automated email from the ASF dual-hosted git repository.
Abacn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new 9a9f48b9542 Fix Flink 2.1+ dependency resolution (#39061)
9a9f48b9542 is described below
commit 9a9f48b95427e2341fba2c5c91506747beb57de3
Author: Yi Hu <[email protected]>
AuthorDate: Tue Jun 23 08:23:15 2026 -0400
Fix Flink 2.1+ dependency resolution (#39061)
---
.../trigger_files/beam_PostCommit_Java_Nexmark_Flink.json | 2 +-
...k_Flink.json => beam_PostCommit_Java_Tpcds_Flink.json} | 0
.github/workflows/beam_PostCommit_Java_Nexmark_Flink.yml | 3 ++-
.../groovy/org/apache/beam/gradle/BeamModulePlugin.groovy | 12 ++++++++++++
examples/java/common.gradle | 12 ++----------
runners/flink/2.1/build.gradle | 10 ++--------
runners/flink/2.1/job-server/build.gradle | 10 ++--------
runners/flink/2.2/build.gradle | 10 ++--------
runners/flink/2.2/job-server/build.gradle | 10 ++--------
sdks/java/testing/nexmark/build.gradle | 15 +++++++++++++++
sdks/java/testing/tpcds/build.gradle | 15 +++++++++++++++
11 files changed, 55 insertions(+), 44 deletions(-)
diff --git a/.github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
b/.github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
index e3d6056a5de..b2683333323 100644
--- a/.github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
+++ b/.github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
@@ -1,4 +1,4 @@
{
"comment": "Modify this file in a trivial way to cause this test suite to
run",
- "modification": 1
+ "modification": 2
}
diff --git a/.github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
b/.github/trigger_files/beam_PostCommit_Java_Tpcds_Flink.json
similarity index 100%
copy from .github/trigger_files/beam_PostCommit_Java_Nexmark_Flink.json
copy to .github/trigger_files/beam_PostCommit_Java_Tpcds_Flink.json
diff --git a/.github/workflows/beam_PostCommit_Java_Nexmark_Flink.yml
b/.github/workflows/beam_PostCommit_Java_Nexmark_Flink.yml
index 96470ca3e1b..f64a9bd41fb 100644
--- a/.github/workflows/beam_PostCommit_Java_Nexmark_Flink.yml
+++ b/.github/workflows/beam_PostCommit_Java_Nexmark_Flink.yml
@@ -109,6 +109,7 @@ jobs:
uses: ./.github/actions/gradle-command-self-hosted-action
with:
gradle-command: :sdks:java:testing:nexmark:run
+ # TODO: Fix query 6,9 for Flink 2
arguments: |
- -Pnexmark.runner=:runners:flink:2.2 \
+ -Pnexmark.runner=:runners:flink:1.20 \
"${{ env.GRADLE_COMMAND_ARGUMENTS }}--streaming=${{
matrix.streaming }}"
diff --git
a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
index b5aef5d23ad..34132bc8149 100644
--- a/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
@@ -954,6 +954,18 @@ class BeamModulePlugin implements Plugin<Project> {
/**
***********************************************************************************************/
+ // Resolves a capability conflict for a given configuration by selecting
the preferred capability provider.
+ project.ext.resolveCapabilitiesConflict = { Configuration configuration,
String capability, String preferred ->
+
configuration.resolutionStrategy.capabilitiesResolution.withCapability(capability)
{
+ def candidate = candidates.find { it.id.toString().contains(preferred)
}
+ if (candidate != null) {
+ select(candidate)
+ } else {
+ selectHighestVersion()
+ }
+ }
+ }
+
// Returns a string representing the relocated path to be used with the
shadow plugin when
// given a suffix such as "com.google.common".
project.ext.getJavaRelocatedPath = { String suffix ->
diff --git a/examples/java/common.gradle b/examples/java/common.gradle
index 0e800e7cf98..f32667d733f 100644
--- a/examples/java/common.gradle
+++ b/examples/java/common.gradle
@@ -35,16 +35,8 @@ configurations.sparkRunnerPreCommit {
exclude group: "org.slf4j", module: "jul-to-slf4j"
exclude group: "org.slf4j", module: "slf4j-jdk14"
}
-configurations.flinkRunnerPreCommit {
- resolutionStrategy.capabilitiesResolution.withCapability("org.lz4:lz4-java")
{
- def candidate = candidates.find { it.id.toString().contains('at.yawk.lz4')
}
- if (candidate != null) {
- select(candidate)
- } else {
- selectHighestVersion()
- }
- }
-}
+resolveCapabilitiesConflict(configurations.flinkRunnerPreCommit,
'org.lz4:lz4-java', 'at.yawk.lz4')
+
dependencies {
directRunnerPreCommit project(path: ":runners:direct-java", configuration:
"shadow")
diff --git a/runners/flink/2.1/build.gradle b/runners/flink/2.1/build.gradle
index e9092c2977f..1e0d565b50d 100644
--- a/runners/flink/2.1/build.gradle
+++ b/runners/flink/2.1/build.gradle
@@ -45,12 +45,6 @@ apply from: "../flink_runner.gradle"
// Flink 2.1 uses at.yawk.lz4:lz4-java instead of org.lz4:lz4-java
// Explicitly prefer Flink's at.yawk.lz4 version to resolve capability conflict
configurations.all {
- resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java')
{
- def candidate = candidates.find { it.id.toString().contains('at.yawk.lz4')
}
- if (candidate != null) {
- select(candidate)
- } else {
- selectHighestVersion()
- }
- }
+ resolveCapabilitiesConflict(it, 'org.lz4:lz4-java', 'at.yawk.lz4')
}
+
diff --git a/runners/flink/2.1/job-server/build.gradle
b/runners/flink/2.1/job-server/build.gradle
index 277ddc07fda..0910fef1120 100644
--- a/runners/flink/2.1/job-server/build.gradle
+++ b/runners/flink/2.1/job-server/build.gradle
@@ -33,12 +33,6 @@ apply from: "$basePath/flink_job_server.gradle"
// Flink 2.1 uses at.yawk.lz4:lz4-java instead of org.lz4:lz4-java
// Explicitly prefer Flink's at.yawk.lz4 version to resolve capability conflict
configurations.all {
- resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java')
{
- def candidate = candidates.find { it.id.toString().contains('at.yawk.lz4')
}
- if (candidate != null) {
- select(candidate)
- } else {
- selectHighestVersion()
- }
- }
+ resolveCapabilitiesConflict(it, 'org.lz4:lz4-java', 'at.yawk.lz4')
}
+
diff --git a/runners/flink/2.2/build.gradle b/runners/flink/2.2/build.gradle
index 3856d20a351..0321dcf42d1 100644
--- a/runners/flink/2.2/build.gradle
+++ b/runners/flink/2.2/build.gradle
@@ -60,12 +60,6 @@ apply from: "../flink_runner.gradle"
// Flink 2.2 uses at.yawk.lz4:lz4-java instead of org.lz4:lz4-java
// Explicitly prefer Flink's at.yawk.lz4 version to resolve capability conflict
configurations.all {
- resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java')
{
- def candidate = candidates.find { it.id.toString().contains('at.yawk.lz4')
}
- if (candidate != null) {
- select(candidate)
- } else {
- selectHighestVersion()
- }
- }
+ resolveCapabilitiesConflict(it, 'org.lz4:lz4-java', 'at.yawk.lz4')
}
+
diff --git a/runners/flink/2.2/job-server/build.gradle
b/runners/flink/2.2/job-server/build.gradle
index 3f6b184e3fc..f116f5a1dcb 100644
--- a/runners/flink/2.2/job-server/build.gradle
+++ b/runners/flink/2.2/job-server/build.gradle
@@ -33,12 +33,6 @@ apply from: "$basePath/flink_job_server.gradle"
// Flink 2.2 uses at.yawk.lz4:lz4-java instead of org.lz4:lz4-java
// Explicitly prefer Flink's at.yawk.lz4 version to resolve capability conflict
configurations.all {
- resolutionStrategy.capabilitiesResolution.withCapability('org.lz4:lz4-java')
{
- def candidate = candidates.find { it.id.toString().contains('at.yawk.lz4')
}
- if (candidate != null) {
- select(candidate)
- } else {
- selectHighestVersion()
- }
- }
+ resolveCapabilitiesConflict(it, 'org.lz4:lz4-java', 'at.yawk.lz4')
}
+
diff --git a/sdks/java/testing/nexmark/build.gradle
b/sdks/java/testing/nexmark/build.gradle
index ec344757961..bd917a3935a 100644
--- a/sdks/java/testing/nexmark/build.gradle
+++ b/sdks/java/testing/nexmark/build.gradle
@@ -39,6 +39,17 @@ def nexmarkRunnerDependency =
project.findProperty(nexmarkRunnerProperty)
def nexmarkRunnerVersionProperty = "nexmark.runner.version"
def nexmarkRunnerVersion = project.findProperty(nexmarkRunnerVersionProperty)
def isSparkRunner = nexmarkRunnerDependency.startsWith(":runners:spark:")
+def isFlink2 = nexmarkRunnerDependency.startsWith(":runners:flink:") && {
+ def version = nexmarkRunnerDependency.substring(":runners:flink:".length())
+ try {
+ def parts = version.split('\\.')
+ def major = parts[0].toInteger()
+ def minor = parts.length > 1 ? parts[1].toInteger() : 0
+ return (major > 2) || (major == 2 && minor >= 1)
+ } catch (Exception e) {
+ return false
+ }
+}()
def isDataflowRunner =
":runners:google-cloud-dataflow-java".equals(nexmarkRunnerDependency)
def isDataflowRunnerV2 = isDataflowRunner && "V2".equals(nexmarkRunnerVersion)
def runnerConfiguration =
":runners:direct-java".equals(nexmarkRunnerDependency) ? "shadow" : null
@@ -92,6 +103,10 @@ dependencies {
gradleRun project(path: nexmarkRunnerDependency, configuration:
runnerConfiguration)
}
+if (isFlink2) {
+ resolveCapabilitiesConflict(configurations.gradleRun, 'org.lz4:lz4-java',
'at.yawk.lz4')
+}
+
if (isSparkRunner) {
configurations.gradleRun {
// Using Spark runner causes a StackOverflowError if slf4j-jdk14 is on the
classpath
diff --git a/sdks/java/testing/tpcds/build.gradle
b/sdks/java/testing/tpcds/build.gradle
index 1714e6e61a8..6a05df96ab2 100644
--- a/sdks/java/testing/tpcds/build.gradle
+++ b/sdks/java/testing/tpcds/build.gradle
@@ -34,6 +34,17 @@ def tpcdsRunnerProperty = "tpcds.runner"
def tpcdsRunnerDependency = project.findProperty(tpcdsRunnerProperty)
?: ":runners:direct-java"
def isSpark = tpcdsRunnerDependency.startsWith(":runners:spark:")
+def isFlink2 = tpcdsRunnerDependency.startsWith(":runners:flink:") && {
+ def version = tpcdsRunnerDependency.substring(":runners:flink:".length())
+ try {
+ def parts = version.split('\\.')
+ def major = parts[0].toInteger()
+ def minor = parts.length > 1 ? parts[1].toInteger() : 0
+ return (major > 2) || (major == 2 && minor >= 1)
+ } catch (Exception e) {
+ return false
+ }
+}()
def isDataflowRunner =
":runners:google-cloud-dataflow-java".equals(tpcdsRunnerDependency)
def runnerConfiguration = ":runners:direct-java".equals(tpcdsRunnerDependency)
? "shadow" : null
@@ -83,6 +94,10 @@ dependencies {
gradleRun project(path: tpcdsRunnerDependency, configuration:
runnerConfiguration)
}
+if (isFlink2) {
+ resolveCapabilitiesConflict(configurations.gradleRun, 'org.lz4:lz4-java',
'at.yawk.lz4')
+}
+
if (isSpark) {
configurations.gradleRun {
exclude group: "org.slf4j", module: "slf4j-jdk14"