使用Gradle構建項目

使用Gradle構建項目
http://blog.javachen.com/2014/09/15/build-project-with-gradle.html

Gradle 是一款基于 Groovy 語言、免費開源的構建工具边琉,它既保持了 Maven 的優(yōu)點感帅,又通過使用 Groovy 定義的 DSL 克服了 Maven 中使用 XML 繁冗以及不靈活的缺點。

Gradle 官方網站:http://www.gradle.org/downloads

安裝

一種方式是從 官方 下載解壓然后配置環(huán)境變量。

Mac 上安裝:

$ brew install gradle

測試是否安裝成功:

$ gradle -v

------------------------------------------------------------
Gradle 2.12
------------------------------------------------------------

Build time:   2016-03-14 08:32:03 UTC
Build number: none
Revision:     b29fbb64ad6b068cb3f05f7e40dc670472129bc0

Groovy:       2.4.4
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.7.0_80 (Oracle Corporation 24.80-b11)
OS:           Mac OS X 10.11.6 x86_64

簡單使用

Gradle 使用 約定優(yōu)于配置(Convention over Configuration)的理念。使用與maven兼容的目錄結構布局。完全按照約定的目錄結構來布置工程文件抗斤,會大大簡化編譯配置文件。

除了常見的src/main/java等目錄丈咐,默認的 web 應用程序根目錄為 src/main/webapp瑞眼,也就是包含 WEB-INF 目錄的上一級目錄。如果工程沒有完全依照約定布局棵逊,可以通過腳本文件指定相應的路徑伤疙。

Gradle 中有兩個最基本的對象:project 和 task。每個 Gradle 的構建由一個 project 對象來表達辆影,它代表著需要被構建的組件或者構建的整個項目徒像。每個 project 對象由一個或者多個 task 對象組成。

Gradle 已經自帶了很多 pugins蛙讥,可以滿足大部分的常見構建任務锯蛀。

Gradle 的默認構建腳本文件為工程根目錄下的 build.gradle。

創(chuàng)建項目

作為測試次慢,創(chuàng)建一個 test 目錄旁涤,然后通過下面命令來初始化一個項目:

$ mkdir test
$ cd test
$ gradle init
:wrapper
:init

BUILD SUCCESSFUL

Total time: 3.058 secs

$ ls
build.gradle    gradle          gradlew         gradlew.bat     settings.gradle

可以看到生成了 gradle 的一些配置文件。接下來在 build.gradle 文件中添加下面代碼迫像,可以支持生成 jar 包:

apply plugin: 'java'

這就是你定義一個Java項目所需要做的一切劈愚。這就會在你項目里使用Java插件,該插件會給你的項目增加很多任務闻妓。

Gradle 期望在 src/main/java 路徑下找到你項目的源代碼菌羽,并且測試在 src/test/java 路徑下的代碼。同時由缆,在src/main/resources 路徑下的文件也會作為資源文件包含在JAR包中注祖,并且 src/test/resources 下的所有文件會包含在 classpath 下以運行測試程序。所有的輸出文件都生成在 build 目錄下犁功,JAR 包生成在 build/libs 目錄下氓轰。

運行下面命令即可生成 jar 包:

$ gradle jar

如果 jar 包中有一個包含 main 方法的主類,想讓其打包之后能夠運行其 main 方法浸卦,則需要添加下面代碼:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.javachen.gradle.HelloWorld'
    }
}

通常,JAR 包需要被發(fā)布到某個地方案糙。為了完成這個功能限嫌,你需要告訴 Gradle 把 JAR 包發(fā)布到哪里靴庆。在 Gradle 中,如 JAR 之類的壓縮包都被發(fā)布到庫中怒医。在我們的樣例中炉抒,我們將會發(fā)布到本地倉庫。你也可以發(fā)布到一個或多個遠端地址稚叹。

發(fā)布 jar 包添加如下配置:

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
    } }
}

此外焰薄,你還可以添加下面代碼,引入 Eclipse 插件以支持生成 Eclipse 工程:

apply plugin: 'eclipse'

添加Maven庫:

repositories {
    mavenCentral()
}

如果想添加依賴扒袖,也是非常簡單塞茅,例如添加 spring 依賴:

apply plugin: 'java'
dependencies {
    compile 'org.springframework:spring-context:3.2.6.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

gradle 便會自動地到 maven 服務器下載 spring-context-3.2.6.RELEASE.jar,以及它所依賴的 jar 包季率。

常用的依賴:

  • (1)compile:編譯生產代碼的依賴環(huán)境野瘦,即src/main/下
  • (2)runtime:生產代碼運行時的依賴(包含編譯生產代碼時的依賴)
  • (3)testCompile:編譯測試代碼的依賴環(huán)境,即src/test下
  • (4)testRuntime:測試代碼運行時的依賴(包含編譯測試代碼時的依賴)

當然飒泻,也可以直接依賴本地的 jar 包鞭光,例如:

apply plugin: 'java'
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
}

也可以通過 buildscript{} 中添加依賴的方式,將相關 jar 包加入到 classpath 中泞遗,如:

buildscript {  
    repositories {  
        mavenCentral()  
    }  
    dependencies {  
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'  
    }  
}

綜上惰许,完成的配置如下:

apply plugin: 'java'
apply plugin: 'eclipse'

jar {
    manifest {
        attributes 'Main-Class': 'com.javachen.gradle.HelloWorld'
    }
}

repositories {
    mavenLocal()
    mavenCentral()
    mavenRepo urls: "http://repository.sonatype.org/content/groups/forge/"
}

dependencies {
    compile 'org.springframework:spring-context:3.2.6.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.+'
    compile fileTree(dir: 'libs', include: '*.jar')
}

buildscript {  
    repositories {  
        mavenLocal()
        mavenCentral()
        mavenRepo urls: "http://repository.sonatype.org/content/groups/forge/"
    }  
    dependencies {  
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'  
    }  
}  

uploadArchives {
    repositories {
        flatDir {
            dirs 'repos'
        }
    }
}

其他使用

創(chuàng)建項目目錄結構

gradle 不像 maven 那樣有固定的項目結構,gradle 原聲 API 是不支持的史辙,要想做到這一點汹买,我們可以自定義一個 task。

apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'war'

task createJavaProject << {
  sourceSets*.java.srcDirs*.each { it.mkdirs() }
  sourceSets*.resources.srcDirs*.each { it.mkdirs()}
}

task createWebProject(dependsOn: 'createJavaProject') << {
  def webAppDir = file("$webAppDirName")
  webAppDir.mkdirs()
}

然后運行下面命令:

$ gradle createJavaProject

另外髓霞,還可以使用 gradle templates 創(chuàng)建項目目錄結構卦睹,這里不做研究。

更加標準的方法是使用 gradle 自帶的插件創(chuàng)建項目目錄結構方库,例如創(chuàng)建 java 項目結構:

$ gradle init --type java-library

這時候的目錄結果如下:

$ tree -L 4
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java
    │       └── Library.java
    └── test
        └── java
            └── LibraryTest.java

7 directories, 8 files

如果想要導入到 idea 中结序,先執(zhí)行下面命令:

$ gradle idea

這時候的 build.gradle 如下:

apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'war'

task createJavaProject << {
      sourceSets*.java.srcDirs*.each { it.mkdirs() }
        sourceSets*.resources.srcDirs*.each { it.mkdirs()}
}

task createWebProject(dependsOn: 'createJavaProject') << {
      def webAppDir = file("$webAppDirName")
        webAppDir.mkdirs()
}

將Java項目從maven遷移到gradle

如何將一個 java 項目從maven遷移到 gradle 呢?gradle 集成了一個很方便的插件:Build Init Plugin纵潦,使用這個插件可以很方便地創(chuàng)建一個新的 gradle 項目徐鹤,或者將其它類型的項目轉換為 gradle 項目。

要將 maven 項目轉換為 gradle 項目邀层,只需要在項目的 pom 文件所在的目錄下執(zhí)行以下命令:

$ gradle init --type pom

上面的命令會根據(jù) pom 文件自動生成 gradle 項目所需的文件和配置返敬,然后以 gradle 項目重新導入即可。

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末寥院,一起剝皮案震驚了整個濱河市劲赠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖凛澎,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹肝,死亡現(xiàn)場離奇詭異,居然都是意外死亡塑煎,警方通過查閱死者的電腦和手機沫换,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來最铁,“玉大人讯赏,你說我怎么就攤上這事±湮荆” “怎么了漱挎?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長网严。 經常有香客問我识樱,道長,這世上最難降的妖魔是什么震束? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任怜庸,我火速辦了婚禮,結果婚禮上垢村,老公的妹妹穿的比我還像新娘割疾。我一直安慰自己,他們只是感情好嘉栓,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布宏榕。 她就那樣靜靜地躺著,像睡著了一般侵佃。 火紅的嫁衣襯著肌膚如雪麻昼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天馋辈,我揣著相機與錄音抚芦,去河邊找鬼。 笑死迈螟,一個胖子當著我的面吹牛叉抡,可吹牛的內容都是我干的。 我是一名探鬼主播答毫,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褥民,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洗搂?” 一聲冷哼從身側響起消返,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤载弄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侦副,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侦锯,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡驼鞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年秦驯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挣棕。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡译隘,死狀恐怖,靈堂內的尸體忽然破棺而出洛心,到底是詐尸還是另有隱情固耘,我是刑警寧澤词身,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布厅目,位于F島的核電站,受9級特大地震影響法严,放射性物質發(fā)生泄漏。R本人自食惡果不足惜拗馒,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呈昔。 院中可真熱鬧挥等,春花似錦、人聲如沸堤尾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哀峻。三九已至涡相,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剩蟀,已是汗流浹背催蝗。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留育特,地道東北人丙号。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓先朦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親犬缨。 傳聞我的和親對象是個殘疾皇子喳魏,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)怀薛,斷路器刺彩,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評論 6 342
  • 什么是Gradle? Gradle是一種依賴管理工具,基于Groovy語言枝恋,面向Java應用為主创倔,它拋棄了基于XM...
    MrMagicWang閱讀 377評論 0 1
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項,請點擊這里進行查閱:DSL參考 1.1新構建系統(tǒng)...
    Chuckiefan閱讀 12,133評論 8 72
  • 一份溫馨的情愫 六月十日焚碌,天氣放晴畦攘,我們一行七人參加朱志東老師女兒回門宴熱鬧而溫馨。 有幸和王溢作協(xié)的各位老師認...
    小河映月閱讀 332評論 2 2