使用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 項目重新導入即可。
參考
- [1] Gradle安裝與簡單使用
- [2] gradle太好用了