在Android / Gradle项目中是否可以只包含特定模块的传递依赖项,而不包括该模块本身?
为了说明,假设模块X
在A
,B
和C
上具有传递依赖关系。我希望我的项目在类路径上有A
,B
和C
,但不是 X
。理想情况下,我想要做的是利用X
已经知道我想要什么依赖项的事实,这样我就不必在A
,B
上明确声明依赖关系,以及我的项目中C
。
假设,我想要的东西大概就像:
implementation(group: 'com.x', name: 'Xlib', version: '1.0', ...){
transitive true //include 'A', 'B', and 'C'
exclude group: 'com.x', module: 'Xlib' //exclude 'X'
}
...在"提名X
作为依赖项,获取其传递依赖关系,并忽略来自X
"的所有顶级包。
有没有办法做到这一点,还是有必要明确声明A
,B
和C
为依赖关系?
答案 0 :(得分:2)
我在我的java-monkey-patch
插件中完成了此here,其中我想要包含target
工件的所有传递依赖项,但不包括target
工件
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
}
}
depSet.each { Map dependency ->
logger.info "Adding $dependency"
dependencies.compile(dependency) {
transitive = false
}
}