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

标签 gradle

如何告诉 gradle 首先构建某个子项目,即使我没有对它们的编译依赖项?内部如何处理项目依赖关系?

示例:

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

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

谢谢

最佳答案

Gradle 构建顺序从来不在项目级别,而始终在任务级别。 from(configuration.schemas) 会自动推断任务依赖关系,但在 from(configuration.schemas.collect { ... }) 的情况下,这不起作用,因为结果值不再可构建。添加 dependsOnconfigurations.schemas 应该可以解决问题。

关于gradle - 使用非编译依赖时如何让gradle先构建依赖子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180933/

相关文章:

android - 如何定义在build.gradle中使用的Gradle版本?

gradle - Gradle Protobuf自定义任务

gradle - Netflix Conductor-java.exe错误= 206文件名或扩展名太长

java - Corda项目设置:无法找到到请求目标的有效认证路径

javascript - meteor run android-spawn ENOENT 和来自 Cordova 的 gradle 错误

android - gradle 和 gradle-experimental 有什么区别?

gradle - Grails 3.3.10中的org.codehaus.groovy.runtime.DefaultGroovyMethods错误

build - 简单的gradle构建文件构建错误

android - Android和Accont Kit:设置默认语言

gradle - Gradle doFirst不更新WAR文件