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

时间:2014-08-07 11:06:39

标签: gradle

我怎么能告诉gradle首先构建某个子项目,即使我没有编译依赖项呢?如何在内部处理项目依赖?

示例:

settings.gradle

include "app", "schema"

的build.gradle

allprojects {
  apply plugin: 'java'
}

架构/的build.gradle

// empty

应用/的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首先自动构建在 configurations.schemas 依赖关系列表中定义的所有子项目(如果它们是项目)。

注意:我希望能够跨多个gradle项目共享extractSchema任务,因此gradle首先从 configurations.schemas 列表中获取要构建的子项目列表非常重要

由于

1 个答案:

答案 0 :(得分:4)

Gradle构建顺序从不在项目级别,但始终在任务级别。 from(configuration.schemas)会自动推断任务依赖关系,但如果是from(configuration.schemas.collect { ... }),则不起作用,因为结果值不再是Buildable。添加dependsOn configurations.schemas可以解决问题。