大綱:
緣起
介紹 dependency management
介紹 gradle 與 ant maven 的差別
如何安裝 gradle (如何在 eclipse 安裝 gradle)
簡易介紹 gradle 怎麼使用
附上已經建好的 build.gradle, settings.gradle
說明因為現有的專案架構,還是得需要手動搬檔的部分 (不然可以直接打包成 ear 檔,ear 黨可以讓佈署變得更輕鬆,但 tomcat 基本上不是一個 J2EE server, 所以無法)
後續待完成:
Repository server (nexus)
把 xxxx-util 整個真正的轉換成都寫在 build.gradle 的設定
Write a task for copy xxxx-util ‘s lib to local tomcat server lib folder.
----------------正文開始處---------------
緣起:
為了減少每次新建開發環境的時候,總是要手動針對每個 project 設定 lib 的 build path,除了設定繁瑣外,每次若有需要測試其他版本的 lib 時還需要去下載 lib 且手動丟到相關位置,測完了之後可能會忘記改回原本的版本。如果能使用設定檔除了能夠好維護之外,使用設定讓其自動下載需要的 lib ,還可以將設定使用 SVN 等版控控管,每次版本同步的時候就會知道是否有人使用了新的 lib。
之所以選擇使用 gradle 的原因是因為它可以跟 Ant 有比較好的相容性。可直接套用在現有的專案結構目錄,只要把 gradle 的設定檔放進去專案根目錄之後,再將現有的舊目錄結構設定進去即可。而如果是使用 Maven 的話,雖然 xml 的設定型式好像比較有結構且可以使用 UI 工具清楚管理 lib 的來源,但好像跟 Ant 不太相容,而且用 Maven 的話一定要照它的 convention,可能無法讓現有專案保持原本的結構,而且現在很多的開發也都漸漸趨向使用 gradle 了 (ex. Android Studio ) 所以決定使用 gradle 來試。
如何安裝 gradle:
- 到 eclipse marketplace 下載 gradle buildship plugin,或是要手動從 gradle 官網上面下載下來安裝也可以,但沒裝在 eclipse 的話就是要去 cmd 下命令執行,比較麻煩但能夠確保執行方式不會受到萬一 plugin 有 bug 的影響,建議兩邊都可以同時使用看看。
- 直接在原有專案的根目錄下加上 build.gradle, settings.gradle 這兩支檔案,settings.gradle 有時候可以不用加,加不加的原因是要看這個 project 有沒有需要用到 sub project, 如果有才需要加。
- 加好了後再對專案按右鍵 : Configure/Add Gradle Nature (只有第一次加設定的時候需要做這步)
-
之後每次有更新 build.gradle 之後需要再按右鍵 Gradle/Refresh Gradle Project 讓 eclipse 更新相對應的 project
- 替每個專案設定 lib 的相依性,第一步要先指定 lib 的來源 repository, 通常會使用公用的 maven repository 及要給 gradle 使用的 plugin。第二步要在 build.gradle 的 dependency scope 裡面設定相依 lib 的使用時機 (compile, compileOnly, testCompile …)
build.gradle 範例:
apply plugin: 'java' // 告訴 eclipse 這個 project 是要用 java (JVM) 來做編譯
apply plugin: 'war' // 若此 Project 是 web project 且最後需要被打包成 war 時要用這個 plugin apply plugin: 'eclipse-wtp' // 表示相關的設定會一併更新到 eclipse 的 wtp 工具(面板)裡,就是在這邊寫好設定之後,打開 eclipse 的 porject properties 一樣可以看到對應的設定,但從 UI 畫面手動設定的就不會更新到 build.gradle 這個設定裡了,所以最好統一在同一處設定才不會造成混淆
repositories {
mavenCentral()
}
dependencies {
// testCompile 表示只有在跑 test case phase 的時候會使用到這個 lib
testCompile 'junit:junit:4.12'
// compile 表示打包這個專案時,會把下面這個 lib 也打包進去
compile 'org.apache.commons:commons-lang3:3.1'
// compileOnly 表示只有在 eclipse 開發時會使用到這個 lib, 打包的時候不會打包進來現在的 project,而 compileOnly 通常也意指此 lib 在 runtime 的時候會由 server 或是其他來源提供
// 下面這些是說此專案需要引用其他 project 的東西,需要搭配 settings.gradle 的來使用
compileOnly project(':xxxx-util')
compileOnly project(':xxl-util')
compileOnly project(':xxl-xxcs-commons')
}
|
- 因為會有一個 project 引用另外一個 project 開發的東西,所以要引用其他專案的時候要另外增加一支 settings.gradle:
/*
// To declare projects as part of a multi-project build use the 'include' method
include 'shared' include 'api' include 'services:webservice' */
// 此以 xxl- project 為例,宣告會使用到下列其他專案
include 'xxxx-util' include 'xxl-xxcs-commons' include 'xxl-util' project(':xxl-xxcs-commons').projectDir = new File(settingsDir, '../xxl-xxcs-commons') project(':xxxx-util').projectDir = new File(settingsDir, '../xxxx-util') project(':xxl-util').projectDir = new File(settingsDir, '../xxl-util') rootProject.name = 'xxl-' |
- 因為現有的專案架構設計成需要把 lib 丟到 tomcat lib 的原因,這些人為的設定在 build system 的 plug-in 似乎不在可以控制的範圍 QQ

沒有留言:
張貼留言