2011-12-12 48 views
2

類MyTask擴展DefaultTask { String屬性= 「默認」在自定義TaskActions中使用gradle任務DSL?

@TaskAction 
def grailsAppClean() { 
    delete fileTree { 
     ... 
    } 
    exec { 
     ... 
    } 
} 

而且在我的插件,我有這樣的:

void apply(Project project) { 
    project.task('myTask', type: MyTask) 
} 

當我的任務直接從外部gradle這個腳本中調用,或使用type: MyTask,我得到以下錯誤:

Could not find method fileTree()...

可以通過DSL以這種方式使用內置任務嗎?如果不是,我該如何手動調用FileTreeExec?我很想能夠使用DSL。

回答

3

首先,您可以編寫腳本插件而不是二進制插件。如果你想堅持到二進制插件,你可以用DSL語法:

void apply(Project project) { 
    project.configure(project) { 
     delete fileTree { 
      ... 
     } 
     exec { 
      ... 
     } 
    } 
} 

有跡象表明,你不能因爲它們與一個Grooyy實現AST變換幾個語法位。想到的是task foo(...)語法。你也必須在每種方法中重複project.configure(project)。儘管如此,你可以將它抽象爲輔助方法。

+0

「腳本插件」是指直接在插件的build.gradle中定義任務嗎?我有許多離散的任務,所以這可能會變得混亂。 –

+0

不,我的意思是另一個.gradle文件,它可以通過'apply from:「path/to/foo.gradle」'或'apply from:「http:// ...」'應用。這就是我們所說的_script plugin_。 –

相關問題