gradle:如何编写groovy任务

gradle:如何编写groovy任务,gradle,groovy,Gradle,Groovy,我一直在努力解决这个问题。这似乎是我想做的一件非常简单的事情,但我就是不知道如何让它工作 我想编写一个外部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

我一直在努力解决这个问题。这似乎是我想做的一件非常简单的事情,但我就是不知道如何让它工作

我想编写一个外部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文件并使用它在构建文件中定义新任务?

您必须将groovy文件放在以下位置:

rootProjectDir/buildSrc/src/main/groovy
参考:

编辑

我从未尝试过更改
buildSrc
的位置,但这似乎是一个未解决的问题:


(如果我错了,请更正)

您必须将groovy文件放在以下位置:

rootProjectDir/buildSrc/src/main/groovy
参考:

编辑

我从未尝试过更改
buildSrc
的位置,但这似乎是一个未解决的问题:


(如果我错了,请更正)

现在您已经将src移动到buildSrc,您还需要修复MyTask.groovy中的一个小错误:

而不是

import org.gradle.api.tasks.DefaultTask
使用


这应该可以修复您的
@TaskAction
注释。

现在您已经将src移动到buildSrc,您还需要修复MyTask.groovy中的一个小错误:

而不是

import org.gradle.api.tasks.DefaultTask
使用


这应该可以修复您的
@TaskAction
注释。

好的,我现在遇到了一个新错误,谢谢。旁注:有没有办法改变这种状况?我正在努力学习这一点,这样我可以为一个更大的项目做出贡献,但这个更大的项目没有buildSrc folderok,我现在遇到了一个新错误,所以谢谢。旁注:有没有办法改变这种状况?我试图学习这一点,这样我就可以为一个更大的项目做出贡献,但这个更大的项目没有buildSrc文件夹