在 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
作为依赖项?
最佳答案
我已经做到了here在我的 java-monkey-patch 插件中,我想包含 target
Artifact 的所有传递依赖项,但不包含 target
Artifact 本身
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
}
}
关于Android/Gradle - 仅包含传递依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49666038/