2

我正在尝试创建一个自定义任务/插件(都拒绝工作)以在我的 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/测试任务.groovy:

package org.gradle.mypackage

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

public class TestTask extends DefaultTask {

    @TaskAction
    def doAction() {

    }
}

构建.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.gradleimport mypackage.TestTask

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

4

2 回答 2

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)
于 2016-02-20T09:38:51.107 回答
0

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

$GRADLE_HOME- gradle 安装目录。

于 2014-12-09T14:08:15.527 回答