如何让gradle在使用非编译依赖项时首先构建依赖子项目



我如何告诉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应该可以解决这个问题。

最新更新