2014-12-09 3 views
0

Я пытаюсь создать пользовательскую задачу/плагин (оба отказываются работать) для использования в моем скрипте построения градиента.Custom Task/Plugin in gradle

Я использую groovy plugin и хочу объявить Tasks/Plugins в отдельных файлах, а не внутри моего build.gradle.

Мой проект дерево выглядит следующим образом:

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

То, что я пытался сделать, это создать свои задачи/Plugin классов внутри 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 Задача в build.gradle с использованием import mypackage.TestTask, но это тоже не сработало.

Мне кажется, что файлы groovy вообще не компилируются, а из того, что я читал в графе docs, следует позаботиться о компиляции и добавлении их в путь к классам.

ответ

-1

Это не то, как это работает. Если вам нужно предоставить настраиваемые плагины и задачи, организованные в пакетах, поместите весь код под buildSrc. Под $GRADLE_HOME/samples/multiProjectBuildSrc Вы можете найти отличный пример того, как это должно быть сделано.

$GRADLE_HOME - каталог установки градации.

1

Здесь вы найдете решение «in-stackoverflow».

В вашем проекте создания папки buildSrc/SRC/главная

Не забудьте создать build.gradle в buildSrc/

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)