2014-12-09 167 views
0

我試圖創建一個自定義的任務/插件(都拒絕工作)在我的gradle構建腳本中使用。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'.

我在做什麼錯?我試圖importbuild.gradle使用import mypackage.TestTask任務,但也沒有工作。

它看起來像我groovy文件根本不編譯,而從我讀的docs gradle應該照顧編譯並將它們添加到類路徑中。

回答

-1

這不是它的工作原理。如果您需要提供以軟件包形式組織的自定義插件和任務,請將整個代碼放在buildSrc目錄下。在$GRADLE_HOME/samples/multiProjectBuildSrc你可以找到一個很好的例子,它應該如何完成。

$GRADLE_HOME - gradle安裝目錄。

1

這裏你去:「in-stackoverflow」解決方案。

在項目中創建文件夾buildSrc/src目錄/主

不要忘記buildSrc/

apply plugin: 'groovy' 

dependencies { 
    compile gradleApi() 
    compile localGroovy() 
} 

在主文件夾中創建的build.gradle現在用你的任務創建的軟件包,例如: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) 
相關問題