我如何告诉gradle先构建某些子项目,即使我对它们没有编译依赖关系?项目依赖关系是如何在内部处理的?
示例:
设置。渐变:
include "app", "schema"
build.gradle:
allprojects {
apply plugin: 'java'
}
schema/build.gradle:
// empty
app/build.gradle:
configurations {
schemas
}
dependencies {
schemas project(":schema")
schemas "org.example:example-schema:1.0"
}
task extractSchema(type: Copy) {
from {
configurations.schemas.collect { zipTree(it) }
}
into "build/schemas"
}
//compileJava.dependsOn extractSchema
运行时:
$ cd app
$ gradle extractSchema
我得到:
Cannot expand ZIP 'schema/build/libs/schema.jar' as it does not exist.
我想要的是gradle首先自动构建configuration.schemas依赖项列表中定义的所有子项目(如果它们是项目(。
注意:我希望能够在多个gradle项目中共享extractSchema任务,因此gradle从configuration.schemas列表中获取要首先构建的子项目列表是很重要的。
感谢
Gradle构建顺序从不在项目级别,而是始终在任务级别。from(configuration.schemas)
会自动推断任务依赖关系,但在from(configuration.schemas.collect { ... })
的情况下,这不起作用,因为得到的值不再是Buildable
。添加dependsOn configurations.schemas
应该可以解决这个问题。