如何将一个 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
}
}
我正在尝试编写一个 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
}
}