From 9b2aac0d50875d3d29a79241b203f3176e454757 Mon Sep 17 00:00:00 2001 From: Daniil Roman Date: Sun, 17 May 2026 17:49:39 +0200 Subject: [PATCH] Fix dependency conflict after upgrading to Testcontainers 2.0.5 --- buildSrc/build.gradle | 4 ++++ .../ComparePOMWithLatestReleasedTask.groovy | 22 +++++++++++++++++-- core/build.gradle | 5 +++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 13414d46a22..a4e0557d58e 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -5,3 +5,7 @@ plugins { repositories { mavenCentral() } + +dependencies { + implementation 'org.apache.maven:maven-artifact:3.9.9' +} diff --git a/buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy b/buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy index 287f934c1e7..1531636e5ad 100644 --- a/buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy +++ b/buildSrc/src/main/groovy/org/testcontainers/build/ComparePOMWithLatestReleasedTask.groovy @@ -1,6 +1,7 @@ package org.testcontainers.build import groovy.xml.XmlSlurper +import org.apache.maven.artifact.versioning.ComparableVersion import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction @@ -10,6 +11,9 @@ class ComparePOMWithLatestReleasedTask extends DefaultTask { @Input Set ignore = [] + @Input + Map minimumVersions = [:] + @TaskAction def doCompare() { def rootNode = new XmlSlurper().parse(project.tasks.generatePomFileForMavenJavaPublication.destination) @@ -23,14 +27,28 @@ class ComparePOMWithLatestReleasedTask extends DefaultTask { def releasedRootNode = new XmlSlurper() .parse("https://repo1.maven.org/maven2/org/testcontainers/${artifactId}/${latestRelease}/${artifactId}-${latestRelease}.pom") - Set dependencies = releasedRootNode.dependencies.children() + Set releasedDependencies = releasedRootNode.dependencies.children() .collect { "${it.groupId.text()}:${it.artifactId.text()}".toString() } + Map currentVersions = [:] for (dependency in rootNode.dependencies.children()) { def coordinates = "${dependency.groupId.text()}:${dependency.artifactId.text()}".toString() - if (!dependencies.contains(coordinates) && !ignore.contains(coordinates)) { + currentVersions[coordinates] = dependency.version.text() + if (!releasedDependencies.contains(coordinates) && !ignore.contains(coordinates)) { throw new IllegalStateException("A new dependency '${coordinates}' has been added to 'org.testcontainers:${artifactId}' - if this was intentional please add it to the ignore list in ${project.buildFile}") } } + + for (entry in minimumVersions) { + def coords = entry.key + def minVersion = entry.value + def currentVersion = currentVersions[coords] + if (currentVersion == null || currentVersion.isEmpty()) { + throw new IllegalStateException("Dependency '${coords}' has a minimum version '${minVersion}' declared in ${project.buildFile} but is missing from the generated POM of 'org.testcontainers:${artifactId}'") + } + if (new ComparableVersion(currentVersion) < new ComparableVersion(minVersion)) { + throw new IllegalStateException("Dependency '${coords}' resolved to '${currentVersion}' in the POM of 'org.testcontainers:${artifactId}', which is below the required minimum '${minVersion}' declared in ${project.buildFile}") + } + } } } diff --git a/core/build.gradle b/core/build.gradle index 66f9fe7dcc0..7d136c232f9 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -66,6 +66,7 @@ dependencies { compileOnly 'org.jetbrains:annotations:26.1.0' testCompileOnly 'org.jetbrains:annotations:26.1.0' api 'org.apache.commons:commons-compress:1.28.0' + api 'org.apache.commons:commons-lang3:3.20.0' api ('org.rnorth.duct-tape:duct-tape:1.0.8') { exclude(group: 'org.jetbrains', module: 'annotations') } @@ -129,6 +130,10 @@ dependencies { tasks.generatePomFileForMavenJavaPublication.finalizedBy( tasks.register('checkPOMdependencies', org.testcontainers.build.ComparePOMWithLatestReleasedTask) { ignore = [ + 'org.apache.commons:commons-lang3', + ] + minimumVersions = [ + 'org.apache.commons:commons-lang3': '3.18.0', ] } )