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