gradle - 在多项目构建中依赖多个gradle任务

标签 gradle android-gradle-plugin multi-module gradle-task

目前,我有启动Google Cloud服务器,运行测试并停止服务器的任务。它在根项目中定义:

buildscript {...}
allprojects {...}

task startServer (dependsOn: "backend:appengineStart") {}
task testPaid (dependsOn: "app:connectedPaidDebugAndroidTest") {}
task stopServer (dependsOn: "backend:appengineStop") {}
task GCEtesting {
    dependsOn = ["startServer",
                 "testPaid",
                 "stopServer"]
    group = 'custom'
    description 'Starts GCE server, runs tests and stops server.'
    testPaid.mustRunAfter 'startServer'
    stopServer.mustRunAfter 'testPaid'
}

我尝试了多种方法来编写类似这样的内容,但仅需完成一项任务即可。我没有得到如何从另一个项目中引用任务并在其上调用mustRunAfter的信息。这是行不通的(我也尝试从Project.tasks.getByPath,root.tasks等引用):
task GCEtesting {
    dependsOn = ["backend:appengineStart",
                 "app:connectedPaidDebugAndroidTest",
                 "backend:appengineStop"]
    group = 'custom'
    description 'Starts GCE server, runs tests and stops server.'
    "app:connectedPaidDebugAndroidTest".mustRunAfter "backend:appengineStart"
    "backend:appengineStop".mustRunAfter "app:connectedPaidDebugAndroidTest"
}

可能吗?使这项工作正确的语法是什么?

最佳答案

看来您的问题是您将dependsOn视为“调用此任务”。实际上,这意味着“确保从属任务开始之前可以得到从属任务的结果”。这就是为什么您的第一个解决方案不起作用的原因:像testPaid.mustRunAfter这样的语句仅影响testPaid任务本身的操作,而不影响其依赖项。

无论如何,您可以使用dependsOnfinalizedBy获得所需的行为,但是必须在应用程序子项目的构建文件中声明它们。

应用程序/build.gradle:

task connectedPaidDebugAndroidTest {
    //
    //...
    //

    dependsOn 'backend:appengineStart' // Ensure appengineStart is run at some point before this task
    finalizedBy 'backend:appendginStop' // Ensure appengineStop is run at some point after this task
}

然后,您可以简单地使用gradle app:connectedPaidDebugAndroidTest运行测试。如果您真的想在根项目中定义一个任务来运行测试,那么这也很容易:

build.gradle:

task GCEtesting {
    dependsOn = "app:connectedPaidDebugAndroidTest"
}

关于gradle - 在多项目构建中依赖多个gradle任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376806/

相关文章:

android - 更改构建工具和gradle配置后,矢量图像在“ ImageView ”上像素化了吗?

java - 带闭包的 Spock 单元测试以错误 "No runnable methods"结束

android - gradle 中的 dexInprocess 不工作

多模块多语言项目的 Travis-ci 文件

android-studio - 如何关闭Android Studio中的通知以在项目的gradle.properties文件中设置代理配置?

Android 切换到 gradle 不编译 JRE7 代码特性

android - 无法将 android studio 3.0.1 中的 dex 与最新的 gradle 合并

android - Gradle从sourceSet中排除文件不起作用

java - Maven(多模块项目) - 在模块之间复制文件

java - Maven 继承不适用于pluginManagement