Gradle 使用具有自定义发布元数据的复合生成时,找不到可传递的依赖项

Gradle 使用具有自定义发布元数据的复合生成时,找不到可传递的依赖项,gradle,groovy,dependencies,Gradle,Groovy,Dependencies,考虑到以下三个项目(foo、bar和app),其中app依赖于bar依赖于foo,我希望能够简单地在projectapp中安装bar,并自动安装库foo。这在以下脚本中可以正常工作: “foo”build.gradle项目 项目“bar”build.gradle 项目“app”build.gradle 问题 使用上述脚本时,可以通过在project app中运行installLibs并验证Bar.txt和Foo.txt都已安装到build/libs目录来验证这一点 但是,如果我将项目“app”中

考虑到以下三个项目(foo、bar和app),其中app依赖于bar依赖于foo,我希望能够简单地在projectapp中安装bar,并自动安装库foo。这在以下脚本中可以正常工作:

“foo”build.gradle项目 项目“bar”build.gradle 项目“app”build.gradle 问题 使用上述脚本时,可以通过在project app中运行
installLibs
并验证
Bar.txt
Foo.txt
都已安装到
build/libs
目录来验证这一点

但是,如果我将项目“app”中的
设置.gradle
文件更改为:

rootProject.name = 'app'

includeBuild '[PATH TO BAR PROJECT]'

然后,如果我再次为应用程序项目运行
/gradle installLibs
,我会发现
Foo.txt
不再安装。有没有一种方法可以手动为project bar指定此生成元数据,这样当它与IncludeFild一起使用时,它的Transative依赖项就会被包括在内?

顺便说一句-我注意到,transitive dependencies+composite build可以很好地用于java项目,所以这一定是可能的
plugins {
  id "maven-publish"
  id "base"
}

repositories {
  mavenLocal()
}

group = "com.test2.bar"
version = "0.0.1"

def distZip = file("${buildDir}/dist.zip")
def distFile = file("${buildDir}/Bar.txt")

tasks.register("createDistFile") {
  outputs.file(distFile)
  doLast {
    distFile.delete()
    distFile.parentFile.mkdirs()
    distFile.text = "bar output 2"
  }
}

tasks.register("assembleZip", Zip) {
  dependsOn "createDistFile"
  from distFile
  archiveName = distZip.name
  destinationDir distZip.parentFile
}

artifacts {
  "default" distZip, {
    builtBy tasks.named("assembleZip")
  }
}

publishing {
  publications {
    main(MavenPublication) {
      artifact(distZip) {
        builtBy tasks.named("assembleZip")
        pom.withXml {
          def dependenciesNode = asNode().appendNode('dependencies')

          def dependencyNode = dependenciesNode.appendNode('dependency')
          dependencyNode.appendNode('groupId', "com.test2.foo")
          dependencyNode.appendNode('artifactId', "foo")
          dependencyNode.appendNode('version', "0.0.1")
        }
      }
    }
  }

  repositories {
    mavenLocal()
  }
}
repositories {
  mavenLocal()
}

configurations {
  api
}

dependencies {
  api "com.test2.bar:bar:0.0.1"
  // This should be automatically installed when bar is installed
  // api "com.test2.foo:foo:0.0.1"
}

tasks.register("installLibs", Copy) {
  dependsOn configurations.api
  destinationDir = file("${buildDir}/libs")
  configurations.api.each { config ->
    from zipTree(config)
  }
  doFirst {
    destinationDir.deleteDir()
  }
}
rootProject.name = 'app'

includeBuild '[PATH TO BAR PROJECT]'