Skip to content

Commit 208cdb5

Browse files
build: put all transitive dependencies as provided in the POM as well
Excluded dependencies will not be written into the POM. This is needed so that dependency analysis on the client side works on the correct set of dependencies. If clients manually compute transitive dependencies they do not know about our exclusions.
1 parent e895d92 commit 208cdb5

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

build.gradle.kts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -335,24 +335,43 @@ publishing {
335335
withXml {
336336
val dependenciesNode = asNode().appendNode("dependencies")
337337

338-
for (dep in bundledDependencies) {
339-
dep.configuration.get().resolvedConfiguration.firstLevelModuleDependencies.forEach {
340-
val dependencyNode = dependenciesNode.appendNode("dependency")
341-
dependencyNode.appendNode("groupId", it.moduleGroup)
342-
dependencyNode.appendNode("artifactId", it.moduleName)
343-
dependencyNode.appendNode("version", it.moduleVersion)
344-
if (it.moduleArtifacts.isNotEmpty()) {
345-
dependencyNode.appendNode("type", it.moduleArtifacts.first().type)
346-
}
347-
dependencyNode.appendNode("scope", "provided")
338+
forEachBundledDependency {
339+
val dependencyNode = dependenciesNode.appendNode("dependency")
340+
dependencyNode.appendNode("groupId", it.moduleGroup)
341+
dependencyNode.appendNode("artifactId", it.moduleName)
342+
dependencyNode.appendNode("version", it.moduleVersion)
343+
if (it.moduleArtifacts.isNotEmpty()) {
344+
dependencyNode.appendNode("type", it.moduleArtifacts.first().type)
348345
}
346+
dependencyNode.appendNode("scope", "provided")
349347
}
350348
}
351349
}
352350
}
353351
}
354352
}
355353

354+
/**
355+
* Visit each bundled dependency, including its transitive dependencies.
356+
*/
357+
fun forEachBundledDependency(action: (ResolvedDependency) -> Unit) {
358+
val seen = mutableSetOf<ResolvedDependency>()
359+
360+
val queue = ArrayDeque<ResolvedDependency>()
361+
362+
for (bundledDependency in bundledDependencies) {
363+
queue.addAll(bundledDependency.configuration.get().resolvedConfiguration.firstLevelModuleDependencies)
364+
365+
while (queue.isNotEmpty()) {
366+
val dep = queue.removeFirst()
367+
if (seen.add(dep)) {
368+
action(dep)
369+
queue.addAll(dep.children)
370+
}
371+
}
372+
}
373+
}
374+
356375
tasks.register<Exec>("pipInstall") {
357376
inputs.file("requirements.txt")
358377
commandLine("python3", "-m", "pip", "install", "-r", "requirements.txt")

0 commit comments

Comments
 (0)