2015年11月27日

Gradle(13)–– Plugin Management

前面有介紹如何建立web專案或是Java專案等等,本章詳細說明Gralde

  • 多Gradle腳本運用

當你需要載入其他gradle腳本時,使用apply from 還載入

語法: apply from: <Path of otherfile.gradle>

範例一、 多Gradle腳本載入

C\:>calcuate.gradle   //計算

apply plugin: 'java'
task task1 {
    println "task1"
}


C\:>project.gradle

apply from:  "calcuate.gradle"

task  mainTask {
    println "It is a main task!"
}

結果

task1
It is a main task!



二位元插件
二進位插件必須實做Plugin的介面功能後,你可以載入它到你的建構腳本。Gradle已經內件函式庫
可以使用。如果你想要使用其他third-party pluings,需要確定可用的classpath路徑,請使用buildscript{}
來設定。

語法 : apply plugin: '<pluginid>'
範例一、 apply plugin : “java”

  • Gradles內建plugins

(1) 建構和測試常用plugins
     Java , Groovy , Scala,  War
(2) 分析plugins
    Checkstyle ,FindBugs ,Sonar ,Sonar Runner ,PMD
(3) IDE plugins
     Eclipse, IDEA ..etc

參考: https://docs.gradle.org/current/userguide/userguide.

  • Third plugins

https://plugins.gradle.org/

  • Java plugin

Java plugin是Gradle的核心一部份,它可以保證我們建構Java專案可以正確編譯、測試和打包。
載入方式為apply plugin: 'java'。

接下來討論建構的任務,我們可以在命令列執行下列的指令:
$ gradle tasks --all

可以看出顯示任務不同有建構任務、測式任務、文件任務等等,使用Java plugin需要符合內建的規範
例如: compileJava和processResources會執行src/main/java 的src/main/resources內的檔案,所以將
完成的java檔和環境設定檔需要分別放在src/main/java 的src/main/resources裡面。接下來我們會說明
gradle的Java plugin指令的功用

範例一、當編譯在src/main底下的java檔案,我們可以使用任務 classes,編譯後的.classes會放在
/build/classes底下,可以下面看到gradle所執行任務的流程。

$ gradle classes

:compileJava
:processResources UP-TO-DATE
:classes

範例二、testClasses用來編譯測試檔與測試環境,編譯後的.classes會放在/build/classes/test底下,
可以下面看到gradle所執行任務的流程。

$ gradle testClasses

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE

範例三、任務test除了編譯檔案外,他會幫我們產生測試報表,放在/build/reports裡面

$ gradle test

C:\Users\bryan\workspace\ex1>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE                                                  //執行junit並產生報表

範例四、使用assemble任務或是jar任務會打包.class和resource的資料到jar檔中並放在build/libs
檔案命名為<project-name>.jar ,如果有加入版本會以<name>-<version>.jar.

$ gradle assemble

Total time: 11.204 secs
C:\Users\bryan\workspace\ex1>gradle assemble
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar
:assemble

範例五、 Gradle也有提供一連串完成的任務叫做build,它會從編譯、打包、測試到完整執行,就不需要
分別的執行,其中clean任務會先清除在build/裡面的資料,再進行build任務

$ gradle clean
$ gradle build

C:\Users\bryan\workspace\ex1>gradle clean
:clean

Total time: 5.866 secs
C:\Users\bryan\workspace\ex1>gradle build
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE

BUILD SUCCESSFUL

範例六、可以在build.gradle列印出這些變數,顯示出目前目前專案libs路徑、程式的路徑等等。詳細可以查https://docs.gradle.org/current/userguide/java_plugin.html.

task displayJavaPluginConvention << {
    println "Lib Directory: $libsDir"
    println "Lib Directory Name: $libsDirName"
    println "Reports Directory: $reportsDir"
    println "Test Result Directory: $testResultsDir"
    println "Source Code in two sourcesets: $sourceSets"
    println "Production Code: ${sourceSets.main.java.srcDirs}"
    println "Test Code: ${sourceSets.test.java.srcDirs}"
    println "Production code output: ${sourceSets.main.output.classesDir}  ${sourceSets.main.output.resourcesDir}"
    println "Test code output: ${sourceSets.test.output.classesDir}  ${sourceSets.test.output.resourcesDir}"

}

  • 專案環境設定

在上面我們學到如何是用預設環境(default properties or conventions)去建立java專案且可以成功編譯,在本節
會學習到如何根據我們的需求客置設定環境

範例一、我們有一個專案需要將編譯的路徑做一些調整如下:
系統預設: src/main/java  => src/sale
系統預設:  src/test/java   => src/saleTest
系統預設:

buildDir = 'buildfolder'
libsDirName = 'libfolder'
sourceSets {
main {
     java {
         srcDir 'src/sale/java'
      }
      resources {
      srcDir 'src/saleTest/resources'
     }
  }
test{
    java {
        srcDir 'src/testcode/java'
         }
        resources {
        srcDir 'src/testcode/resources'
     }
  }
}

testResultsDirName = "$buildDir/new-test-result"
sourceSets.main.output.classesDir="${buildDir}/classes/sale/java"
sourceSets.main.output.resourcesDir="${buildDir}/classes/sale/resources"
sourceSets.test.output.classesDir="${buildDir}/classes/saleTest/java"
sourceSets.test.output.resourcesDir="${buildDir}/classes/saleTest/resources"

沒有留言:

張貼留言