Gradle 配置继承和解析

Gradle 配置继承和解析,gradle,build.gradle,Gradle,Build.gradle,我和gradle之间有些问题,我不知道为什么这不起作用: 项目A和2个子项目B和C B和C有一个名为masterConfiguration和superConfiguration的配置(谁扩展了masterConfiguration) 我在两者中都添加了一些依赖项 当我这样做时: configurations.superConfigurations.resolvedConfiguration.files 一切正常,我有superConfiguration和masterConfiguration中的

我和gradle之间有些问题,我不知道为什么这不起作用:

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

B和C有一个名为
masterConfiguration
superConfiguration
的配置(谁扩展了masterConfiguration)

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

当我这样做时:

configurations.superConfigurations.resolvedConfiguration.files

一切正常,我有
superConfiguration
masterConfiguration
中的所有文件

现在,问题来了

我在项目a(根项目)中创建了一个配置(projectAConfiguration)。 此配置扩展了B和C的超级配置。 我没有在其中添加新的依赖项

如果我这样做:
configurations.projectAConfiguration.resolvedConfiguration.files
我什么都没有。我不明白为什么

settings.gradle=>

include 'B'
include 'C'
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
build.gradle=>

include 'B'
include 'C'
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):


您可以通过引用子项目来获得子项目的配置,方法与声明依赖项的方法相同。您不需要创建另一个扩展它的配置

例如(Groovy DSL):


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

在所有子项目上添加任务

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
  }
}

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

我已经用这个解决方案解决了我的问题:

在所有子项目上添加任务

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
  }
}

我不知道这是否好,也许有更好的解决办法。
但这是我第一次看到一个项目中的配置从另一个项目扩展而来,如果这不是一个受支持的用例,我也不会感到惊讶。你想干什么?也许我们可以帮助您找到另一种方法。简单地说:我想从项目任务中的子项目解析配置。格拉德尔警告我说:这不安全。关于它的文档说:创建一个扩展另一个的配置并解析您的配置这是我第一次看到一个项目中的配置从另一个项目扩展而来,如果这不是一个受支持的用例,我不会感到惊讶。你想干什么?也许我们可以帮助您找到另一种方法。简单地说:我想从项目任务中的子项目解析配置。格拉德尔警告我说:这不安全。关于它的文档说:创建一个扩展了另一个配置的配置并解析您的配置此cas工作,但出现了一个警告:此配置:B:超级配置解析时没有以安全的方式访问项目。此行为已被弃用,并计划在Gradle 6.0中删除此cas工作,但出现警告:此配置:B:超级配置已在未安全访问项目的情况下解决。此行为已被弃用,并计划在Gradle 6.0中删除