gradle:如何编写一个常规任务

时间:2016-07-28 15:44:46

标签: gradle groovy

我一直试图通过user guide。这似乎是我想要做的非常简单的事情,但我无法弄清楚如何让它发挥作用。

我想写一个外部groovy文件来定义一个任务,然后在build.gradle中调用该任务。这是我的build.gradle文件:

// Apply the groovy plugin to add support for Groovy
apply plugin: 'groovy'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // We use the latest groovy 2.x version for building this library
    compile 'org.codehaus.groovy:groovy-all:2.4.7'
    compile gradleApi()
    compile localGroovy()    
    // We use the awesome Spock testing and specification framework
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
    testCompile 'junit:junit:4.12'
}

task myTask (type: my.package.MyTask)

然后,在src/main/groovy/my/package下我MyTask.groovy

package my.package

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class MyTask extends DefaultTask {
    String greeting = 'hello from MyTask'

    @TaskAction
    def greet(){
        println greeting
    }
}

我甚至无法列出任务:

$ gradle tasks

FAILURE: Build failed with an exception.

* Where:
Build file '/projects/gradle/build.gradle' line: 21

* What went wrong:
A problem occurred evaluating root project 'gradle'.
> Could not get unknown property 'my' for root project 'gradle' of type org.gradle.api.Project.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 3.193 secs

此时,我完全不知道发生了什么或如何做我想做的事。这似乎是最简单的可能示例,但遵循用户指南却让我无处可去。无论我做什么,我都无法超越这个例外。

如何编写groovy文件并使用它来在构建文件中定义新任务?

2 个答案:

答案 0 :(得分:1)

您必须将groovy文件放在:

rootProjectDir/buildSrc/src/main/groovy

参考: https://docs.gradle.org/current/userguide/custom_tasks.html#N14573

修改

我从未尝试更改buildSrc的位置,但似乎是一个未解决的问题:
https://issues.gradle.org/browse/GRADLE-2816

(如果我错了,请更正)

答案 1 :(得分:1)

现在您已将src移至buildSrc,您还需要修复MyTask.groovy中的小错误:

而不是

import org.gradle.api.tasks.DefaultTask

使用

import org.gradle.api.tasks.TaskAction

应该修复你的@TaskAction注释。