【问题标题】:Gradle define dependcies with api but found dependencies both in api configuration and implementation configurationGradle 使用 api 定义依赖关系,但在 api 配置和实现配置中都发现了依赖关系
【发布时间】:2020-04-30 18:40:52
【问题描述】:

我正在尝试将我的 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库依赖。

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

【问题讨论】:

  • 问题不清楚。请详细说明您面临的问题。

标签: android maven gradle


【解决方案1】:

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

configurations[configurationName].allDependencies.each {
}

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

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

configurations[configurationName].dependencies.each {
}

更多关于配置的信息在here扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多