正如我博客的讀者所知道的, 我有點像Maven迷 。 我從2007年8月左右開始使用Maven,從沒有回過頭。 但是,就像其他所有情況一樣,“變化是唯一不變的”。 現在這個領域還有其他參與者,Gradle看起來是最有前途的。 我決定試一試,并在本文中分享了我的發現/學習的要點(當然,一篇文章只能勉強刮傷表面,但這仍然是一個開始)。 如果您從事基于Java的項目,并使用Maven,則可能會發現這篇文章有趣。
什么是Gradle?
Gradle將自己介紹為企業自動化工具。 從我到目前為止所看到的,我傾向于同意,它的確似乎勾勒了旨在成為該框架的所有框框。 然而,這是一個有點的宏偉目標 ,salesy談話。 擁有一個很好的目標(例如,嘗試成為企業自動化工具),但我個人認為這是一個雄心勃勃,而不是現實。
從Java技術專家的角度來看,消除雄心和銷售投入-Gradle(看起來像)Swift成為處理Java項目的所有構建和發布相關活動的好工具。
Maven對我來說很好。
是的,它確實。 我與一些相當大的企業一起工作,說實話,即使他們將所有Java項目都放在Maven上,他們也將取得長足的進步。 因此,就我個人的經驗而言,在一家正規公司中,出于所有實際目的,Maven不僅足夠好,而且如果得到正確和廣泛的使用,也將是一個巨大的飛躍。
話雖這么說,雖然企業擁有使用工具和技術安全運行的奢侈品(甚至確實有這種需求),但我們的技術專家并不擁有奢侈品。 當工具/技術/框架證明自己很勇敢時,企業可以聘請知道這些工具(有時甚至是流行語)的顧問,而那些沒有花費足夠的精力來保持更新的技術專家可能會發現自己正在努力跟上。 訣竅是要知道哪些技術可以投入時間,哪些時間不可以。
至于Gradle,它設法吸引了一些真正令人印象深刻的顧客。 Spring人們已經將Spring核心轉移到Gradle。 休眠的人詳細記錄了他們繼續學習Gradle的原因。 Grails的人似乎對 Gradle 有強烈的意見 。
我不會嘗試爭取Gradle的好處。 首先,我對該工具還不了解。 其次,我已經分享的鏈接來自一些相當著名的公司,它們與相當成功的技術公司合作,并且他們在整合Gradle的好處方面做得很好。
我的簡單總結是
- Gradle允許您在Groovy中編寫代碼。 因此,無論您希望構建和發布腳本做什么,您都可以編寫幾乎任何代碼。
- Gradle-有機會向像Maven這樣的先行者學習-似乎一開始就解決了一些問題。 處理多個模塊,使用多個源文件夾等都是很好的例子。
- 只要Maven不在身邊,就意味著支持有些粗略。 的
我使用的STS插件肯定有一些粗糙之處。 - 由于您可以編寫幾乎任何所需的代碼,因此輕松射擊自己也很容易。 如此靈活-我認為對于企業來說,使用Gradle進行標準化的構建和發布跨項目將是一個艱難的時期。
所以,你去了。 兩點贊成,兩點反對。 相當平衡。 這足以使我感興趣。 如果您也很感興趣,請繼續閱讀。
那么,我該如何開始?
我建議您先為幾個鏈接添加書簽。 Gradle 主頁 , 下載頁面 , 相關工具列表。 電子書《 使用Gradle進行構建和測試 》。 完全值得注冊。 我推薦它。 最后,您將在Gradle中花費更多的時間后,可以更好地理解Gradle用戶指南 。
因此,繼續下載最新版本。 我已經獲得了1.3版。 解壓縮并將其放在您喜歡的任何位置。 我通常將此類工具(基于Java的工具)轉儲到C:\ ProgramFiles(注意Program-?-Files之間缺少的空間)。 因此,對于本文,我有一個C:\ ProgramFiles \ gradle-1.3文件夾,其中包含我們剛剛下載的所有Gradle糖果。
我們需要稍微調整gradle.bat文件。 在批處理文件的開頭添加一個JAVA_HOME。 Gradle需要有權訪問機器的Java安裝。 保留文件的其余部分。
文件:C:\ ProgramFiles \ gradle-1.3 \ bin \ gradle.bat
SET JAVA_HOME=C:\ProgramFiles\Java\jdk1.7.0_09
...
@if '%DEBUG%' == '' @echo off ...
...
現在,只是為了測試您是否已將正確的東西連接在一起,請創建一個批處理文件。 它只是一行,因此您可以在命令提示符下鍵入它。 但是我傾向于將其放入批處理文件中,因為稍后我傾向于在其中添加更多內容。
文件:C:\ ProgramFiles \ gradle-1.3 \ bin \ GradleCommands.bat
gradle -v
如果運行此批處理文件,您將看到Gradle宣布其版本。 如果您現在和我在一起,那么您的機器上可以運行香草Gradle。 恭喜你 但是,對于您的大多數實際目的而言,這還不夠。 讓我們對工具進行更多的介紹 。
我不再使用Eclipse。 STS確實做得非常好,我已經使用了幾年了。 幸運的是,還有一個用于STS的Gradle插件 。 安裝過程有詳細記錄,在此不再贅述。 但是,安裝過程無法傳達出它并不是那么簡單。 我在兩臺不同的機器上嘗試過它,不得不經歷了好幾次,才能使它起作用。 我的建議是不要在Eclipse / STS的工作安裝中嘗試它,除非您有能力將其破壞幾個小時。 制作另一個STS實例并進行處理。 您的毅力將通過STS中的新Gradle導入功能(以及其他一些功能,我們將在后面進行檢查)得到回報。
最后一件事–在繼續之前,請在STS中打開“首選項”,并將Gradle設置為C:\ ProgramFiles \ gradle-1.3文件夾。 我想確保STS只是在運行香草Gradle,而沒有其他任何操作。 如果需要,我可以退出STS并在命令提示符下鍵入相同的命令,并確保得到相同的結果。 我喜歡從編輯器執行操作,但是鄙視被鎖定。完成后,您需要導入一個基于Java的項目(使用Gradle)。
如何創建基于Gradle的Java項目以導入STS?
這是樂趣開始的地方。 只需創建一個文件夾(我將其稱為gradle001)。 在其中放入一個build.gradle文件。 現在,這就是STS導入它所需的全部。 build.gradle中包含一些理論。 我現在不會研究它。 讓我們看看下面的build.gradle文件。
文件:/gradle001/build.gradle
apply plugin: 'java'def localMavenRepo = 'file://D:/mavenrepo'
repositories {mavenCentral()maven { url= localMavenRepo }
}sourceCompatibility = 1.7
version = '1.0-SNAPSHOT'
group = 'foo.bar.gradle'dependencies {testCompile 'junit:junit:4.11'
}
您現在看到有趣的部分了嗎? 盡管我沒有在文件中添加任何注釋,但是您能猜出大多數說明是什么意思嗎? 我希望你們大多數人都能。 大家知道,我一直在使用Maven,本地存儲庫保存在D:/ mavenrepo。 使用Gradle,我可以重用該本地存儲庫,也可以使用Maven中央存儲庫。 從我的角度來看,Gradle不能與Maven友好,我喜歡Gradle盡力使開發人員的生活變得更加輕松。
現在,我們將啟動STS(使用Gradle)并導入“新的Gradle項目”,然后在其中導入剛剛創建的文件夾結構。 如果一切正常,您將在STS的“項目瀏覽器”視圖中很好地看到該項目。 我的個人經歷對此有些粗略。 我必須嘗試幾次,然后才能使用它。 但是,一旦導入成功,事情就會變得更加順利。
Maven曾經通過虛擬主類和測試類為我提供了更完整的項目。
是。 Maven曾經為您“創建”一個項目,您可以從許多模板(原型)中選擇一個來創建您的項目結構。 las,我找不到Gradle的類似功能(正如我在本文開頭承認的那樣,我是此工具的新手,因此,如果我缺少任何內容,請告訴我。請發表評論)。
事實上,沒有為您創建任何虛擬項目。 但是,工具的強度(例如Gradle)不是那樣。 我們已經看到讀取build.gradle很容易。 現在,讓我們編寫一些虛擬代碼,親自了解Gradle可以為我們做些什么。
文件:/gradle001/src/main/java/foo/bar/AppMain.java
package foo.bar;public class AppMain {public static void main(String[] args) {System.out.println(new AppMain().greet());}public String greet() {return 'Hello world.';}
}
文件:/gradle001/src/test/java/foo/bar/AppMainTest.java
package foo.bar;import static org.junit.Assert.*;import org.junit.Test;public class AppMainTest {@Testpublic void test() {assertEquals(new AppMain().greet(), 'Hello world.'); }}
更新的文件:/gradle001/build.gradle
apply plugin: 'java'def localMavenRepo = 'file://D:/mavenrepo'
repositories {mavenCentral()maven { url= localMavenRepo }
}sourceCompatibility = 1.7
version = '1.0-SNAPSHOT'
group = 'foo.bar.gradle'dependencies { testCompile 'junit:junit:4.11' }task(runSimple, dependsOn: 'build', type: JavaExec) {main = 'foo.bar.AppMain'classpath = sourceSets.main.runtimeClasspath
}
就這樣。 現在,如果我們運行build.gradle的“ runSimple”任務,Gradle將為我們做很多事情。 它將進行標準的清理,編譯,測試并生成測試報告(假設您到目前為止也已在編寫代碼,請在您的計算機中檢出/gradle001/build/reports/tests/index.html。驚喜),建立并最終運行主類。 大約需要18行build.gradle。 我必須說,我認為這根本不是一件壞事。
有什么大不了的?
你是對的。 但是您錯過了重點。 即使是25,000行代碼,這18行構建腳本也可以正常工作。 如果您仍然不確定,我建議您閱讀這篇文章,其中264行構建腳本似乎表現出色。
嗯……很好,但是Maven的“力量”也沒有那么長嗎?
你可能是對的。 盡管人們似乎針對這種可能性提供了各種各樣的論據和數據,但我認為這不是要討論的重點。
事實是Maven中的pom.xml只是一個配置文件。 在常規的一天,常規的構建和發布人員不會在Maven中編寫任何代碼。 當然,Maven允許您創建各種插件,它們可以解決“大多數”問題。 但是,似乎(最“最后”)才是爭論的焦點。 在場景/需求不在“大多數”場景之外的地方,使用Maven是一件非常困難的事情。 隨著技術生態系統變得越來越多樣化,人們開始反抗這種束縛。
我個人認為這就是故事的發展方向。 批處理文件(xyz.bat)具有強大的功能,但是難以管理(很難讀取)。 您必須為不同的操作系統編寫不同的內容。 沒有任務層次結構。 除了最瑣碎的項目,我不知道有人喜歡維護它們。
因此來到了螞蟻。 它還功能強大,并且在任務管理方面做得很好。 您擁有幾乎所有目標的目標,而沒有目標的目標則可以在批處理文件中編寫代碼,然后從Ant調用它。 達不到標準的地方。 人們在他們的項目中以各種可能的方式使用它,并且在大多數項目中,構建腳本本身就是一個項目。 他們很難管理,團隊中只有幾個人確切地知道他們的工作方式,沒有人愿意修改它們。
這就是Maven獲得重大成就的地方。 它以一致的方式滿足了諸如魅力之類的“大多數”要求。 有一種固定的方法可以完成大多數事情。 因此,構建腳本不再是一個黑洞。 而且普通的Joe用Maven腳本射擊自己的可能性較小。
有了Gradle,我們正以更大的力量調情。 期望普通的開發人員使用Gradle進行編碼,而不僅僅是配置插件(如在Maven中一樣)。 因此,普通開發人員會在自己覺得合適的情況下輕松完成工作。
恰恰是當項目冒著創建可能嚴重破壞構建腳本的風險,周圍沒有知識庫的時候,開發人員會喜歡其中的編碼,但討厭維護它,管理人員會對構建腳本產生噩夢在演示前一天失敗,將不得不忍受它。
那你到底在說什么
從我對Maven的了解(無論人們是否喜歡Gradle,人們似乎都同意我的觀點),它對于標準/平均/大多數要求都做得很好。 它做得很好。 并且存在不允許您突破的界限,在此界限既可以視為a鎖,也可以視為安全功能。 如果您要使用標準技術堆棧創建另一個J2EE Web應用程序/ Java桌面應用程序,我會說沒有理由放棄Maven。 如果您還沒有接受它,請這樣做,您的生活會輕松得多。
但是,如果您在產品開發項目中,并且正在超越人們認為java / j2ee具備的能力的界限(并且假設您不只雇用普通的Joes),我想您可能想在Gradle嘗試一下。 它確實有能力。 一起工作很有趣。 我認為Gradle的前進道路確實是光明的,充滿了可能性。 花時間在上面是一件好事。
今天就這些。
如果您希望到目前為止閱讀過,希望您喜歡它,或者至少發現它很吸引人。 我的文章僅基于我對Gradle的修改,而不是通過任何想象力得出的關于該主題的硬道理。 如果您發現任何錯誤或本文正確的內容,請在下面發表評論。 我將非常有義務。
參考: Gradle –我們的JCG合作伙伴 Partho在Tech for Enterprise博客上的Maven觀點 。
翻譯自: https://www.javacodegeeks.com/2013/01/gradle-a-maven-perspective.html