Gradle - 使现有的 android 项目成为其他项目的子项目并运行"gradlew tasks"



第一部分

我有一个现有的Android项目是用gradle构建的。

settings.gradle看起来像这样:

include ':android', ':androidTest', ':androidTestApp'

build.gradle看起来像这样:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}
task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}
task customClean(dependsOn: [':android:clean', ':androidTest:clean', ':androidTestApp:clean']) {
}
allprojects {
    repositories {
        mavenCentral()
        mavenLocal()
    }
}

我需要做的是创建一个项目,它是这个android项目的父项目,并运行这个android项目任务。我只添加include 'android-sdk:android'到新根项目的settings.gradle,这是我现在所需要的。一切工作正常,我可以运行任务的android项目像这样gradlew androidBuild:

task androidBuild(dependsOn: 'android-sdk:android:assemble') << {
    group unitySdkGroupName
}

当我在新的根项目上运行gradlew tasks时出现问题。我得到

Caused by: org.gradle.api.UnknownTaskException: Task with path ':android:clean' not found in project ':android-sdk'.

我知道我可以通过删除像这样的冒号来修复这个问题,但我想以某种方式使任务命令工作而不改变android项目。

    task customClean(dependsOn: ['android:clean', 'androidTest:clean', 'androidTestApp:clean']) {
}
第2部分

当我添加到settings.gradle的根项目其他嵌套项目

include 'android-sdk:androidTest'
include 'android-sdk:androidTestApp'

我在依赖于android模块(这是androidTest模块)的子项目的依赖项部分得到错误:

dependencies {
    compile project(path: ":android")
    compile 'com.google.android.gms:play-services:7.3.0'
}

和得到这个当我刷新项目(再次似乎相对路径问题):

Error:(30, 0) Project with path ':android' could not be found in project ':android-sdk:androidTest'.

所以问题是 -我可以使gradlew tasks命令正常工作而不修改底层android项目,以及如何以最优雅的方式完成?

遗憾的是:没有。不支持嵌套的多项目构建。我应该添加,但是尽管已经显示出支持它们的意图,但绝对没有迹象表明何时可以期望此功能。

见https://discuss.gradle.org/t/nested-multimodule-builds-with-a-flat-directory-layout/7509/13

我甚至找不到一个功能请求https://discuss.gradle.org/c/bugs

最新更新