如何将一个 Gradle 配置的传递依赖添加到另一个?

How do I add just the transitive dependencies of one Gradle configuration to another?

我正在尝试编写一个 Gradle 插件来修改依赖项的 JAR(通过在构建期间与 AspectJ 编织)。但是,由于我修改它们的方式,我需要在编译时使用未修改的版本,并在 运行 时将其替换为修改后的版本。因此,在我的插件中,我创建了一个配置供用户添加需要修改的依赖项。我想让插件将这些直接依赖项添加到仅编译类路径,将这些直接依赖项的修改版本添加为 运行time-only 类路径,并将未修改的传递依赖项添加到编译和 运行时间类路径。

我的问题是如何只将该配置的传递依赖项添加到 运行time 类路径而不添加直接依赖项?

这似乎是不可能的,因为,为了获得传递依赖,我需要在 运行time 配置之前解析我的配置,所以我可以将我的配置的一些已解析的依赖添加到 [= 运行时间配置解析前的21=]时间配置。

附带说明一下,我一直依赖于类路径的顺序,这样我就可以在 运行 时包含修改后的版本和未修改的版本,并且它使用修改后的版本。但是,我认为这可能不适用于动态解析 类.

查看我的 monkey patch plugin 的源代码,其中我获得了 "target" 依赖项的传递依赖项,但没有 "target" 本身

有趣的片段

            configurations {
                monkeyPatchNonTransitive { transitive = false }
                monkeyPatchTransitive
            }

                dependencies {
                    monkeyPatchTransitive target
                    monkeyPatchNonTransitive target
                    compileOnly(target) {
                        transitive = false
                    }
                }

                Set<Map>  depSet = [] as Set
                ResolvedDependency topDependency = configurations.monkeyPatchTransitive.resolvedConfiguration.firstLevelModuleDependencies.iterator().next()
                topDependency.children.each { ResolvedDependency child ->
                    child.allModuleArtifacts.each { ResolvedArtifact artifact ->
                        ModuleVersionIdentifier mvi = artifact.moduleVersion.id
                        def dependency = [
                                group  : mvi.group,
                                name   : mvi.name,
                                version: mvi.version,
                                ext    : artifact.extension
                        ]
                        if (artifact.classifier) {
                            dependency['classifier'] = artifact.classifier
                        }
                        depSet << dependency
                    }
                }