gradle+idea 快速上手

gradle+idea 快速上手

gradle介紹

Gradle是一個構建工具,定位和maven一樣,用于管理項目依賴和構建項目。和maven比起來的優(yōu)勢是:語法更靈活,更方便管理項目(個人很討厭XML)。

gradle具有以下特點:

  • 按約定聲明構建和建設;
  • 強大的支持多工程的構建;
  • 強大的依賴管理(基于Apache Ivy),提供最大的便利去構建工程;
  • 全力支持已有的 Maven 或者Ivy倉庫基礎建設;
  • 支持傳遞性依賴管理;
  • 基于groovy腳本構建,groovy簡單易學;
  • 具有廣泛的領域模型支持構建;
  • 易遷移;
  • 自由和開放源碼;

可以說是maven有得gradle也有,maven沒有的gradle也有。gradle在windows下安裝也很簡單,和maven一樣:

  1. gradle官網(wǎng) 下載安裝包并解壓
  2. 將解壓的文件夾路徑配置到環(huán)境變量,先添加一個GRADLE_HOME 然后在path下添加 %GRADLE_HOME%\bin
  3. cmd跑 gradle -v 查看配置是否成功
  4. gradle 用戶手冊 方便平時查詢相關操作

gradle的基本使用

idea中已經(jīng)集成gradle環(huán)境,你可以使用idea來構建gradle項目也可以通過命令行來使用gradle。在idea中 file-> setting ->搜索框輸入gradle可查看gradle相關配置。

使用gradle新建項目

新建普通項目:


new_normal.png

新建springboot項目:

在如下圖界面時選擇Gradle Project即可

springboot.png

gradle項目結構及配置文件說明

使用idea創(chuàng)建的gradle項目如圖:


dir.png

src結構和maven無異,不再介紹;gradle文件夾 存放gradle wrapper相關文件;build.gradle相當于maven里面的pom.xml,setting.gradle用于多模塊的配置。

gradle wrapper是gradle項目構建工具,它能在本地沒有gradle的情況下,從遠程下載gradle并自動解壓縮以構建項目,自動管理gradle版本。gradle-wrapper.properties是gradle wrapper的配置,distributionUrl指定本地沒有配置gradle的情況下從哪下載gradle,distributionBase指定gradle下載和緩存jar的根目錄,默認用戶目錄。在實際使用中我們一般不直接使用gradle,而是使用gradle wrapper,而對于idea而言我們可以不去關心兩者區(qū)別,idea的gradle環(huán)境是基于gradle wrapper的

build.gradle結構

plugins {
    id 'java'
}
group 'com.muggle'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
    // mavenCentral()
    maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
}
dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

節(jié)點說明

  • sourceCompatibility:指定編譯.java文件的jdk版本
  • plugins:插件配置;格式為id ?plugin id? version ?plugin version? [apply ?false?] Gradle的核心插件只需提供id的簡稱就可以
  • repositories:倉庫配置,mavenCentral()代表中央倉庫,你也可以用maven{url ‘<url>’}的方式添加一個倉庫
  • dependencies:依賴的坐標集合

dependencies說明

在idea中,你復制好maven的xml格式依賴 直接粘貼到dependencies節(jié)點里面它會自動調(diào)整成compile 'groupId :artifactId:version'而不需要我們手動去改(但似乎有個時候不管用)。

在gradle中,項目依賴的格式為作用范修飾符 'groupId:artifactId:version',作用范圍修飾符包括

  1. complie:編譯范圍依賴在所有的 classpath 中可用,同時它們也會被打包,這個是最常用的
  2. runtime:runtime 依賴在運行和測試系統(tǒng)的時候需要,但在編譯的時候不需要。
  3. testComplie:測試期編譯需要的附加依賴
  4. testRuntime:測試運行期需要

gradle打包

build.png

和在idea中使用maven一樣,點擊右側gradle標簽可看到上圖相關gradle的操作,build對應的是./gradlew build命令;右鍵運行build會生成一個build文件夾 class文件和jar包都在里面。

groovy 語言簡單學習

Groovy 和java有很大程度上相似,學習成本低,只是為了更好使用gradle 簡單學習Groovy

在idea中打開groovy console 點擊 tool->groovy console 打開

groovy.png

寫第一個程序

// 這是一行注釋
println ("test")
// 簡寫
println "ssssss"

ctrl+enter 執(zhí)行代碼

list map的應用

// 定義變量 相當于var 弱類型
def i=15
println(i)
def s ="nihao"
println s
// 集合定義
def list=['s','a']
// 添加元素
list << 'c'
// 取出 元素
println list.get(0)
println list.get(0)
// map
def map=['key':'value']
println map.get('key')
// 添
map.test='add'
println map.get('test')

閉包的語法

// 閉包 相當于函數(shù)式編程
def close1={
    println "你好"
}
// 方法定義
def test(Closure closure){
    closure()
}
//使用閉包
test(close1)
// 帶參閉包
def  close2={
    v-> println v+v+v
}
def test2(Closure closure){
    closure("sss")
}
//使用帶參閉包
test2(close2)
// 占位符
def close3={
    v->
        println("test $v ")
}
test2(close3)

gradle 實踐

多模塊

在idea中構建多模塊很簡單,和maven操作一樣,但項目結構有所不同。在父模塊中有一個settings.gradle文件,指定了子模塊包含哪些,而需要繼承給子模塊的東西需要在父模塊build.gradle中配置subprojects閉包。

父模塊build.gradle 示例


plugins {
    id 'java'
}
group 'com.muggle'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
    mavenCentral()
}
subprojects {
    apply plugin: 'java'
    apply plugin: 'idea'

    version = '1.0'
    // JVM 版本號要求
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    // java編譯的時候缺省狀態(tài)下會因為中文字符而失敗
    [compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'
    //相當于maven的properties
    ext {
        springVersion = '4.3.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        // 通用依賴
        compile(
                "org.springframework:spring-context:$springVersion",
                "org.springframework:spring-orm:$springVersion",
        )
        // 依賴maven中不存在的jar
        ext.jarTree = fileTree(dir: 'libs', include: '**/*.jar')
        // 測試依賴
        testCompile(
                "org.springframework:spring-test:$springVersion",
                "junit:junit:4.12"
        )
    }
    // 顯示當前項目下所有用于 compile 的 jar.
    task listJars(description: 'Display all compile jars.') << {
        configurations.compile.each { File file -> println file.name }
    }
}

子模塊模塊之間相互依賴方式:

dependencies{  
    // 這個子模塊 依賴 test 模塊
    compile project(":test")  
}  

如果項目需要達成war包 添加插件apply plugin: 'war'。

task

task是gradle中的任務,包括任務動作(task action)和任務依賴(task dependency)。task代表細分的下來的構建任務:編譯classes、生成jar包相關信息等一些任務。所以我們能編寫task來控制打包過程。task和task之間也存在依賴關系,通過task dependency來指定。

其實build指令本質(zhì)就是執(zhí)行各個task,在做protobuf開發(fā)的開發(fā)的時候我就可以通過配置task來在指定指定位置生成對應的java代碼。

task 示例代碼

task first {
    doLast {
        println ">>>>>>>>>>>>>>"
    }
}

右擊idea右側gradle中的first執(zhí)行task

?
demo.png

控制臺輸出:


> Task :first
>>>>>>>>>>>>>>

總結

gradle相較maven來說更靈活,但現(xiàn)在市場占有率最大的還是maven,gradle在安卓開發(fā)的領域使用比較多??催^spring源碼的就知道,spring就是用gradle來管理的。讀完本篇博客后我希望你能順暢的使用gradle構建一個普通的java項目、一個springboot項目、一個多模塊項目。感謝閱讀。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容