如何从命令行运行单个gradle任务

26
在我的项目中,我在build.gradle中有几个任务。我希望这些任务在运行时相互独立。也就是说,我需要从命令行单独运行一个任务。但是,“gradle taskA”命令会运行taskA和taskB,而我不想这样做。如何防止运行任务? 以下是我的示例。
   task runsSQL{
    description 'run sql queries'
    apply plugin: 'java'
    apply plugin: 'groovy'

    print 'Run SQL'  }

task runSchema{
    apply plugin: 'java'
    apply plugin: 'groovy'

    print 'Run Schema' }

这是我得到的输出。 在此输入图像描述


解决方案在这里:https://dev59.com/4GAg5IYBdhLWcg3wfa56#23546350 - Tomin
我看到你运行了 gradle 命令。但是我在我的电脑上找不到 gradle.exe 文件。我是 Android 和 Gradle 构建系统的新手。请问我在哪里可以找到 gradle 可执行文件? - Saeed Neamati
如果你没有安装Gradle,可以使用gradlew(大多数Gradle项目都包含gradlew),否则你可以从Gradle官网安装Gradle。 - ThePyroEagle
您不需要将每个插件分别应用于每个任务。只需在文件开头执行 apply plugin: 'java'apply plugin: 'groovy' 即可。 - ThePyroEagle
2个回答

25

我想你可能遗漏了一个重点,那就是这里没有定义任务,而是配置任务。请参阅Gradle文档:http://www.gradle.org/docs/current/userguide/more_about_tasks.html

你所需的是类似这样的:

task runsSQL (dependsOn: 'runSchema'){
    description 'run sql queries'
    println 'Configuring SQL-Task' 
    doLast() {
        println "Executing SQL"
    }
}

task runSchema << {
    println 'Creating schema' 
}

请注意使用“<<”作为“doLast”的快捷方式。当执行任务时,只会执行doLast步骤,而任务的配置将在解析gradle文件时执行。

当您调用

gradle runSchema

你将会看到 '配置SQL任务',然后是 '创建模式' 的输出。这意味着runSQLTask已经被配置但尚未执行。

如果你调用

gradle runSQL

然后你会看到:

配置SQL-Task :runSchema 创建架构 :runsSQL 执行SQL

因为runSQL依赖于runSchema,所以必须先执行runSchema。


1
是的,这回答了问题。谢谢。 - Tomin

4
你可以使用-x选项或--exclude-task开关来从任务图中排除任务。但最好提供可运行的示例。

1
好的,这就是为什么我告诉你提供一个例子的原因 - 现在这是一个相当抽象的讨论。 - Opal
好的,但是没有定义taskAtaskB。现在很难重现这个错误。你正在尝试运行哪些任务?此外,您没有将actions添加到任务中。因此,在configuration时间运行闭包中的代码。 - Opal
runSQL和runSchema是我尚未完成的任务,而不是taskA和taskB(我只是为了简单起见选择了这些名称)。我没有添加操作,因为它们非常庞大。但是我可以说,它涉及从文件中读取一些SQL查询,并根据某些条件执行它。此外,这两个任务都接受来自命令行的参数。 - Tomin
1
哦,你提供的脚本似乎有点奇怪 :/ 请提供一个简单但可运行的脚本来重现问题。 - Opal
是的。那很有帮助。谢谢。 - Tomin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接