gradle中的自定义任务/插件

时间:2014-12-09 13:28:37

标签: groovy gradle gradle-plugin

我正在尝试创建一个自定义任务/插件(两者都拒绝工作),以便在我的gradle构建脚本中使用。

我正在使用groovy插件,并希望在单独的文件中声明Tasks / Plugins,而不是在build.gradle中。

我的项目树如下:

/project
.
|-gradle
|-src
|---main
|-----groovy
|-----java
|-----resources
|---test
|-----groovy
|-----java
|-----resources
|-build.gradle

我尝试做的是在src/main/groovy中创建我的任务/插件类,然后在我的build.gradle中使用它们。

让我举一个小例子。

src/main/groovy/mypackage/ TestTask.groovy:

package org.gradle.mypackage

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

public class TestTask extends DefaultTask {

    @TaskAction
    def doAction() {

    }
}

的build.gradle

plugins {
    id 'groovy'
}

sourceCompatibility = 1.7

repositories {
    mavenCentral()
}

dependencies {

    compile(
        localGroovy(),
        gradleApi()
    )

    testCompile(
        [ group: 'junit', name: 'junit', version: '4.11' ]
    )

}

task testTask(type: TestTask)

当我尝试使用我的gradle.build(清理,构建等)做任何事情时,我收到以下错误:

  

错误:(116,0)无法在根项目'project'上找到属性'TestTask'。

我做错了什么?我尝试使用import build.gradle import mypackage.TestTask中的{{1}}任务,但这也无效。

在我看来,groovy文件完全不能编译,而我在docs gradle中读到的内容应该注意编译并在类路径中添加它们。

2 个答案:

答案 0 :(得分:2)

在这里:“in-stackoverflow”解决方案。

在你的项目中创建文件夹buildSrc / src / main

不要忘记在buildSrc /

中创建build.gradle
apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

现在在主文件夹中创建包含您的任务的包,例如:pl.myAwesomeCompany.gradle.tasks

package pl.myAwesomeCompany.gradle.tasks

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

class ExampleTask extends DefaultTask {

    @TaskAction
    void execute(IncrementalTaskInputs inputs) {
        println inputs.incremental ? "CHANGED inputs considered out of date"
            : "ALL inputs considered out of date"
    }
}

瞧!现在,在您的项目中,您可以使用您的插件:

import package pl.myAwesomeCompany.gradle.tasks.ExampleTask
task incremental(type:ExampleTask)

答案 1 :(得分:-1)

这不是它的工作原理。如果您需要提供在包中组织的自定义插件和任务,请将整个代码放在buildSrc目录下。在$GRADLE_HOME/samples/multiProjectBuildSrc下你可以找到一个很好的例子。

$GRADLE_HOME - gradle安装目录。