gradle - Gradle插件- 'Could Not resolve all dependencies for configuration…'中的getArtifacts()结果

标签 gradle gradle-plugin android-sdk-2.3

我正在尝试编写gradle任务(下面的代码),该任务聚合来自多项目构建中ResolvedArtifact对象的信息。但是,当我使用gradle 4.8.1在示例android项目(https://github.com/gmetal/sample-dependency-check-app)上运行任务时,出现以下错误:

07:29 $ gradle clean resolveArtifacts
> Task :app:resolveArtifacts FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:resolveArtifacts'.
> Could not resolve all dependencies for configuration ':app:debugAndroidTestCompileClasspath'.
   > More than one variant of project :mylibrary matches the consumer attributes:
       - Configuration ':mylibrary:debugApiElements' variant android-aidl:
           - Found artifactType 'android-aidl' but wasn't required.
           - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
           - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
           - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
           - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
       - Configuration ':mylibrary:debugApiElements' variant android-classes:
           - Found artifactType 'android-classes' but wasn't required.
           - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
           - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
           - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
           - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
       - Configuration ':mylibrary:debugApiElements' variant android-manifest:
           - Found artifactType 'android-manifest' but wasn't required.
           - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
           - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
           - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
           - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
       - Configuration ':mylibrary:debugApiElements' variant android-renderscript:
           - Found artifactType 'android-renderscript' but wasn't required.
           - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
           - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
           - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
           - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.
       - Configuration ':mylibrary:debugApiElements' variant jar:
           - Found artifactType 'jar' but wasn't required.
           - Required com.android.build.api.attributes.BuildTypeAttr 'debug' and found compatible value 'debug'.
           - Found com.android.build.api.attributes.VariantAttr 'debug' but wasn't required.
           - Required com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' and found compatible value 'Aar'.
           - Required org.gradle.usage 'java-api' and found compatible value 'java-api'.

resolveArtifacts任务的代码如下:
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ResolvedArtifact
import org.gradle.api.tasks.TaskAction

import static org.gradle.api.specs.Specs.SATISFIES_ALL

class ResolveArtifacts extends DefaultTask {
    ResolveArtifacts() {
        group = 'Sample Task'
        description = 'Attempts to resolve artifacts.'
    }

    @TaskAction
    analyze() {
        project.allprojects.collectMany { Project currentProject ->
            currentProject.configurations.findAll {
                canBeResolved(it)
            }.each { Configuration configuration ->
                configuration.resolvedConfiguration.lenientConfiguration.getArtifacts(SATISFIES_ALL).each { ResolvedArtifact artifact ->
                    logger.lifecycle("------ resolved ${artifact}")
                }
            }
        }
    }

    def canBeResolved(configuration) {
        configuration.metaClass.respondsTo(configuration, "isCanBeResolved") ?
                configuration.isCanBeResolved() : true
    }
}

关于如何解决上述错误的任何建议?原始问题已发布到github上的dependency-check-gradle

最佳答案

解决方案是使用configuration.incoming.artifactView并仅过滤所需的 Artifact 类型:

def artifactType = Attribute.of('artifactType', String)
def types = ['jar', 'aar']
types.each { type ->
    configuration.incoming.artifactView {
        attributes {
            it.attribute(artifactType, type)
        }
    }.artifacts.each {
        println "artifact file: ${it.file}"
    }
}

与gradle小组一起查看我的github issue

关于gradle - Gradle插件- 'Could Not resolve all dependencies for configuration…'中的getArtifacts()结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51231805/

相关文章:

android - 将项目迁移到新的实验性 gradle 插件

gradle - Gradle HTML依赖关系报告中的颜色表示法

OS X 上的 Android SDK 安装文件夹

gradle - 在Gradle 3.5中替换WAR文件中的资源文件

java - Lombok 承认 setter/getter ,但编译失败

kotlin - 使用自定义插件时 Gradle 提供的 Null 属性

android - 下载android 2.3.4 API

Android - 将图像名称 "package"抛出编译时错误

spring-boot - 从groovy迁移到Kotlin Gradle脚本后,单元测试中出现NullPointerException

Android studio - 更改 .gradle 文件夹位置