groovy - gradle 中的自定义任务/插件

标签 groovy gradle gradle-plugin

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

我正在使用 groovy 插件,并且想要在单独的文件中声明任务/插件,而不是在我的 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 执行任何操作(清理、构建等)时,出现以下错误:

Error:(116, 0) Could not find property 'TestTask' on root project 'project'.

我做错了什么?我尝试使用 import mypackage.TestTaskbuild.gradle导入任务,但这也不起作用。

在我看来,从我在 docs 中读到的内容来看,groovy 文件根本无法编译。 gradle 应该负责编译并将它们添加到类路径中。

最佳答案

给你:“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)

关于groovy - gradle 中的自定义任务/插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27380086/

相关文章:

groovy - 可以将常规代码编译为在JRE中运行吗?

class - 在Gradle中创建便宜的新任务类

groovy - 如何使用groovy脚本将子元素动态添加到SOAPUI中的SOAP请求

android - 项目的 Gradle 任务依赖于其他项目的任务

android - 在任务 :transformClassesWithJarMergingAndroidTest 中构建 Android gradle 期间出现重复条目

gradle - 如何将jars从libs文件夹添加到另一个jar?

gradle - 仅通过gradle下载节点8.17.0(如果系统中未安装该节点)

jenkins - 如何将加密的密码从 Jenkins 传递到gradle?

loops - 如何在这种情况下使用 map ?

常规闭包参数