2017-07-02 56 views
0

考慮跟進建管道:如何在插件列表的特定插件後添加自己的插件任務?

15:21:50: Executing external task 'build'... 
Hello from the GreetingPlugin 
:compileKotlin UP-TO-DATE 
:compileJava NO-SOURCE 
:copyMainKotlinClasses UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:findMainClass 
:jar 
:bootRepackage 
:assemble 
:compileTestKotlin UP-TO-DATE 
:compileTestJava NO-SOURCE 
:copyTestKotlinClasses UP-TO-DATE 
:processTestResources NO-SOURCE 
:testClasses UP-TO-DATE 
:test UP-TO-DATE 
:check UP-TO-DATE 
:build 

BUILD SUCCESSFUL 

我需要編譯一些SaaS的主題位於:

src/main/resources/VAADIN/themes/customtheme/customtheme.scss 

成相應的.css在目錄版本。

我相信,我需要做哪些必須要執行的gradle一些插件:

之間:罐子:bootRepackage讓自己的.css在最後的.jar結束。

到目前爲止,我有這個片段:

apply plugin: 'kotlin' 
apply plugin: 'kotlin-spring' 
apply plugin: 'eclipse' 
apply plugin: 'org.springframework.boot' 
apply plugin: GreetingPlugin 


class GreetingPlugin implements Plugin<Project> { 
    void apply(Project project) { 
     project.task('hello') { 
      println "Hello from the GreetingPlugin" 
     } 
    } 
} 

但正如我們所看到的GreetingPlugin似乎首先執行。有沒有一種方法可以插入我的插件以在構建管道中的特定點執行?例如,現有的列出插件知道他們必須執行的順序?

回答

0

搖籃配置階段執行階段之間進行區分。您的完整構建腳本在配置階段中執行,並且插件的apply方法在應用插件時直接調用。在執行階段 Gradle執行您列爲命令行參數及其任務依賴關係的所有任務的任務操作,doFirstdoLast的關閉。

由您的插件創建的任務hello根本沒有執行,只有配置!在任務配置期間,輸出將打印到命令行。要移動println命令將執行階段,試試這個代碼:

project.task('hello') { 
    doFirst { 
     println "Hello from the GreetingPlugin" 
    } 
} 

這樣一來,你就不會看到命令行輸出,因爲任務仍然沒有得到執行。您可以通過使用gradle命令指定任務名稱來執行它,如gradle hellogradle build hello。爲了你的任務的執行綁定到另一個任務,你可以使用dependsOn方法:

project.tasks['jar'].dependsOn('hello') 

請注意,如果你的插件應用到一個項目,不提供jar任務此方法將失敗。在最後的實現中,你應該嘗試整合一個更安全的任務依賴。

相關問題