diff --git a/build.gradle.kts b/build.gradle.kts index 979dacd5e..01e1a3d5c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -335,17 +335,15 @@ publishing { withXml { val dependenciesNode = asNode().appendNode("dependencies") - for (dep in bundledDependencies) { - dep.configuration.get().resolvedConfiguration.firstLevelModuleDependencies.forEach { - val dependencyNode = dependenciesNode.appendNode("dependency") - dependencyNode.appendNode("groupId", it.moduleGroup) - dependencyNode.appendNode("artifactId", it.moduleName) - dependencyNode.appendNode("version", it.moduleVersion) - if (it.moduleArtifacts.isNotEmpty()) { - dependencyNode.appendNode("type", it.moduleArtifacts.first().type) - } - dependencyNode.appendNode("scope", "provided") + forEachBundledDependency { + val dependencyNode = dependenciesNode.appendNode("dependency") + dependencyNode.appendNode("groupId", it.moduleGroup) + dependencyNode.appendNode("artifactId", it.moduleName) + dependencyNode.appendNode("version", it.moduleVersion) + if (it.moduleArtifacts.isNotEmpty()) { + dependencyNode.appendNode("type", it.moduleArtifacts.first().type) } + dependencyNode.appendNode("scope", "provided") } } } @@ -353,6 +351,27 @@ publishing { } } +/** + * Visit each bundled dependency, including its transitive dependencies. + */ +fun forEachBundledDependency(action: (ResolvedDependency) -> Unit) { + val seen = mutableSetOf() + + val queue = ArrayDeque() + + for (bundledDependency in bundledDependencies) { + queue.addAll(bundledDependency.configuration.get().resolvedConfiguration.firstLevelModuleDependencies) + + while (queue.isNotEmpty()) { + val dep = queue.removeFirst() + if (seen.add(dep)) { + action(dep) + queue.addAll(dep.children) + } + } + } +} + tasks.register("pipInstall") { inputs.file("requirements.txt") commandLine("python3", "-m", "pip", "install", "-r", "requirements.txt")