Gradle 使用具有自定义发布元数据的复合生成时,找不到可传递的依赖项
考虑到以下三个项目(foo、bar和app),其中app依赖于bar依赖于foo,我希望能够简单地在projectapp中安装bar,并自动安装库foo。这在以下脚本中可以正常工作: “foo”build.gradle项目 项目“bar”build.gradle 项目“app”build.gradle 问题 使用上述脚本时,可以通过在project app中运行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”中
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]'