配置继承和解析

问题描述

我在gradle上遇到了一些麻烦,我不知道为什么这不起作用:

项目A和2个子项目B和C

B和C具有名为masterConfigurationsuperConfiguration(扩展了masterConfiguration)的配置

我在两者中都添加了一些依赖项。

当我这样做时:

configurations.superConfigurations.resolvedConfiguration.files

一切正常,我拥有superConfigurationmasterConfiguration中的所有文件。

现在是问题。

我在项目A(rootProject)中创建一个配置(projectAConfiguration)。 此配置从B和C扩展superConfiguration。 我没有在此添加任何新的依赖项。

如果我这样做: configurations.projectAConfiguration.resolvedConfiguration.files 我一无所有。我不明白为什么?

settings.gradle =>

include 'B'
include 'C'

build.gradle =>

configurations {
  projectAConfiguration
}

def rootConfiguration = configurations.projectAConfiguration

subprojects {
  configurations {
    masterConfiguration
    superConfiguration {
      extendsFrom masterConfiguration
    }
  }

  rootConfiguration.extendsFrom configurations.superConfiguration

  dependencies {
    masterConfiguration 'group:artifactid:version'
    superConfiguration 'anotherGroup:anotherArtifactid:version'
  }

  //ALL IS OK
  println configurations.superConfiguration.resolvedConfiguration.files

}

  //NOT OK
  println configurations.projectAConfiguration.resolvedConfiguration.files

解决方法

您可以通过引用子项目的方式与声明依赖项的方式相同来获取子项目的配置。您无需创建其他配置即可对其进行扩展。

例如(Groovy DSL):

// Root project A
task printConfigurationB { 
  doLast { 
    println project("B").configurations.superConfiguration.resolve()
  }
}
,

我已使用此解决方案解决了我的问题:

在所有子项目上添加任务。

task resolveMyConf {
  doLast {
    it.ext.confResolve = it.configurations.superConfiguration..resolvedConfiguration.files
  }
}

和项目A

task resolveAllConf {
  suprojects.each {
    dependsOn it.resolveMyConf 
  }

  doLast {
    //and now,we can collect all task result
  }
}

我不知道这是否很好,也许有更好的解决方案。 但这是工作

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...