Gradle 使用 api 定义依赖项,但在 api 配置和实现配置中都发现了依赖项



我正在尝试将我的 Android 库项目的依赖项发布到 maven 存储库。所以我在构建 Gradle 文件中添加了以下代码。

publishing {
publications {
maven(MavenPublication) {
artifact bundleRelease
pom.withXml {
//Creating additional node for dependencies
def dependenciesNode = asNode().appendNode('dependencies')
//Defining configuration names from which dependencies will be taken (debugCompile or releaseCompile and compile)
def configurationNames = ["releaseCompile", 'compile', 'api', "implementation"]
configurationNames.each { configurationName ->
if (!configurations.names.contains(configurationName)) {
return
}
configurations[configurationName].allDependencies.each {
if (it.group != null && it.name != null) {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
//If there are any exclusions in dependency
if (it.excludeRules.size() > 0) {
def exclusionsNode = dependencyNode.appendNode('exclusions')
it.excludeRules.each { rule ->
def exclusionNode = exclusionsNode.appendNode('exclusion')
exclusionNode.appendNode('groupId', rule.group)
exclusionNode.appendNode('artifactId', rule.module)
}
}
}
}
}
}
}
}
}

我发现我的pom文件具有双重依赖项,其内容相同。就像下面一样:

<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
</dependencies>

我对api的 gradle 依赖

dependencies {
api "com.google.code.gson:gson:${gson_version}"
}

我在发布中添加了一些日志。我发现api配置和implementation配置都有 gson 库依赖项。

我很困惑。有人想解释为什么会这样吗?

我想出了这个问题。 因为我使用了allDependencies它将获得完整的依赖项集,包括由超配置贡献的依赖项。

configurations[configurationName].allDependencies.each {
}

implementation扩展了配置api。因此,当我们获得allDependencies时,我们将获得api贡献的依赖项implementation.

在这种情况下,我应该使用dependencies来获取直接包含在此配置中的依赖项集(忽略超配置(。

configurations[configurationName].dependencies.each {
}

有关配置的详细信息,请参阅此处。

最新更新