Gradle提供了一些默認(rèn)的Tasks給Java項(xiàng)目,比如,編譯源代碼、運(yùn)行測(cè)試、打包JAR.每一個(gè)Java項(xiàng)目都有一個(gè)標(biāo)準(zhǔn)的路徑布局,這個(gè)布局定義了去哪里找項(xiàng)目的源代碼、資源文件和測(cè)試代碼,你也可以在配置中修改這些默認(rèn)位置。
Gradle的約定類(lèi)似于Maven的約定優(yōu)于配置的實(shí)現(xiàn),Maven的約定就是一個(gè)項(xiàng)目只包含一個(gè)Java源代碼路徑,只產(chǎn)生一個(gè)JAR文件,對(duì)于企業(yè)級(jí)開(kāi)發(fā)來(lái)講這樣是顯然不夠的,Gradle允許你打破傳統(tǒng)的觀念,Gradle的構(gòu)建生命周期如下圖:
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag6.png" alt="" /> http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag5.png" alt="" />
Gradle完全兼容Ant、Maven,你可以很容易的從Ant或Maven遷移到Gradle,Gradle并不強(qiáng)迫你完全把你的Build邏輯遷移過(guò)來(lái),它允許你復(fù)用已有的Ant構(gòu)建邏輯。Gradle完全兼容Maven和Ivy倉(cāng)庫(kù),你可以從中檢索依賴(lài)也可以發(fā)布你的文件到倉(cāng)庫(kù)中,Gradle提供轉(zhuǎn)換器能把Maven的構(gòu)建邏輯轉(zhuǎn)換成Gradle的構(gòu)建腳本。
現(xiàn)有的Ant腳本可以無(wú)縫的導(dǎo)入到Gradle項(xiàng)目中,Ant的Target在運(yùn)行時(shí)直接映射成Gradle的任務(wù),Gradle有一個(gè)AntBuilder可以把你的Ant腳本混成Gradle的DSL(領(lǐng)域特定語(yǔ)言),這些腳本看起來(lái)像是Ant的XML,但是去掉了尖括號(hào),對(duì)于Ant用戶(hù)來(lái)說(shuō)非常方便,不需要擔(dān)心過(guò)渡到Gradle的學(xué)習(xí)周期。
Gradle能夠解析現(xiàn)有的Maven POM,從而得到傳遞性依賴(lài)的信息,并且引入到當(dāng)前項(xiàng)目中,在此基礎(chǔ)上,它也支持排除傳遞性依賴(lài)或者干脆關(guān)閉傳遞性依賴(lài),這一點(diǎn)是Maven所不具備的特性。 Gradle項(xiàng)目使用Maven項(xiàng)目生成的資源已經(jīng)不是個(gè)問(wèn)題了,接著需要反過(guò)來(lái)考慮,Maven用戶(hù)是否能夠使用 Gradle生成的資源呢?或者更簡(jiǎn)單點(diǎn)問(wèn),Gradle項(xiàng)目生成的構(gòu)件是否可以發(fā)布到Maven倉(cāng)庫(kù)中供人使用呢?這一點(diǎn)非常重要,因?yàn)槿绻霾坏竭@一點(diǎn),你可能就會(huì)丟失大量的用戶(hù)。幸運(yùn)的是Gradle再次給出了令人滿(mǎn)意的答案。使用Gradle的Maven Plugin,用戶(hù)就可以輕松地將項(xiàng)目構(gòu)件上傳到Maven倉(cāng)庫(kù)中:
apply plugin: 'maven'
...
uploadArchives {
repositories.mavenDeployer {
repository(url: "http://localhost:8088/nexus/content/repositories/snapshots/") {
authentication(userName: "admin", password: "admin123")
pom.groupId = "com.juvenxu"
pom.artifactId = "account-captcha"
}
}
}
在上傳的過(guò)程中,Gradle能夠基于build.gradle生成對(duì)應(yīng)的Maven POM文件,用戶(hù)可以自行配置POM信息,比如這里的groupId和artifactId,而諸如依賴(lài)配置這樣的內(nèi)容,Gradle是會(huì)自動(dòng)幫你進(jìn)行轉(zhuǎn)換的。由于Maven項(xiàng)目之間依賴(lài)交互的直接途徑就是倉(cāng)庫(kù),而Gradle既能夠使用Maven倉(cāng)庫(kù),也能以Maven的格式將自己的內(nèi)容發(fā)布到倉(cāng)庫(kù)中,因此從技術(shù)角度來(lái)說(shuō),即使在一個(gè)基于Maven的大環(huán)境中,局部使用Gradle也幾乎不會(huì)是一個(gè)問(wèn)題。
http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag7.png" alt="" />