Gradle – Maven的觀點

正如我博客的讀者所知道的, 我有點像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的好處方面做得很好。

我的簡單總結是

  1. Gradle允許您在Groovy中編寫代碼。 因此,無論您希望構建和發布腳本做什么,您都可以編寫幾乎任何代碼。
  2. Gradle-有機會向像Maven這樣的先行者學習-似乎一開始就解決了一些問題。 處理多個模塊,使用多個源文件夾等都是很好的例子。
  3. 只要Maven不在身邊,就意味著支持有些粗略。 的
    我使用的STS插件肯定有一些粗糙之處。
  4. 由于您可以編寫幾乎任何所需的代碼,因此輕松射擊自己也很容易。 如此靈活-我認為對于企業來說,使用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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

postgis安裝_從零開始,構建電子地圖網站:0_2_數據處理postgis

軟件安裝完,開始數據處理。從China Historical GIS下載一份數據。一、數據下載數據來源:China Historical GIS:https://sites.fas.harvard.edu/~chgis/data/chgis/v6/先下載一份時間序列數據:Download CHGIS V6 TIME SERIES Datah…

sar圖像去噪matlab,一種基于總曲率的SAR圖像變分去噪方法與流程

本發明屬于數字圖像處理技術領域,具體涉及一種基于總曲率的SAR圖像變分去噪方法。背景技術::相干斑噪聲是合成孔徑雷達(Synthetic Aperture Radar,簡稱SAR)圖像的重要特征,嚴重影響SAR圖像的可解譯性。相干斑噪聲通常作…

Linux下用netstat查看網絡狀態、端口狀態

在linux一般使用netstat 來查看系統端口使用情況步。 netstat命令是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的 netstat命令的功能是顯示網絡連接、路由表和網絡接口信息,可以讓用戶得知目…

課時2.瀏覽器和服務器(了解)

1.什么是瀏覽器? 瀏覽器就是由安裝在我們電腦上的一款軟件,QQ,百度影音等一樣,都是安裝在電腦上的一款軟件 那這些軟件之間由什么區別呢? 它們的區別就是它們的功能不太一樣,QQ是用來聊天的,…

微信自動回復

http://itchat.readthedocs.io/zh/latest/tutorial/tutorial0/。 這個是學習網址,到時候自己學一下。做個案例試試轉載于:https://www.cnblogs.com/lilinzhiyu/p/7985864.html

python 定義變量_用python解決動態的定義變量名(并給其賦值方法:大數據處理)...

前言:今天為大家帶來的內容是:用python解決動態的定義變量名(并給其賦值方法:大數據處理)具有很好的參考價值,希望對大家有所幫助。喜歡本文內容的記得點贊轉發收藏不迷路哦!!!最近消費kafka數據…

appcan php圖片上傳,appcan文件上傳php,asp通用

首先說appcan內部實現了file標簽,我們就不用糾結這個問題了,還提供了上傳百分比哦,然后下面的方法按從上到下依次看,很簡單。上傳php,asp頁面很簡單 ,接收‘file_data’這個文件信息就可以了,如…

javascript 動態修改css樣式

方法一:改變外聯css文件,這里不講這個。 方法二:通過改變claaName來改變樣式,語法: obj.className "style2";//或者obj.setAttribute("class", "style2"); 方法三:使用obj…

POJ 3225 Help with Intervals(線段樹)

POJ 3225 Help with Intervals 題目鏈接 集合數字有的為1,沒有為0,那么幾種操作相應就是置為0或置為1或者翻轉,這個隨便推推就能夠了,然后開閉區間的處理方式就是把區間擴大成兩倍,偶數存點,奇數存線段就可…

在Spring中嵌入HSQLDB服務器實例

我一直在愉快地使用XAMPP進行開發,直到不得不將其托管在可通過Internet訪問的某個地方,供客戶端進行測試和使用。 我有一個僅具有384 RAM的VPS,并且需要快速找到一種方法,因此決定將XAMPP安裝到VPS中。 由于內存不足,因…

python與材料計算公式_《從問題到程序:用Python學編程和計算》——2.11 補充材料-阿里云開發者社區...

本節書摘來自華章計算機《從問題到程序:用Python學編程和計算》一書中的第2章,第2.11節,作者 裘宗燕,更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。2.11 補充材料本書各章的主要內容將圍繞著怎樣通過編程解決計算問題…

centos 6.9 NTP基準時間服務器配置

時間服務器端 yum install ntp -y vim /etc/ntp.conf 增加允許客戶端訪問 restrict 192.168.0.0 mask 255.255.0.0 nomodify 配置成自啟動 chkconfig ntpd on service ntpd start 客戶端配置 每天對時一次 crontab -e * 2 * * * ntpdate 192.168.139.130 轉載于:https://www.cn…

hsdfz -- 6.16 -- day1

恩這回不寫游記了 按照老師要求記錄今天的心里路程:這題似乎可做期望得分150->日部分分似乎不是很顯然->a題似乎是結論題,大力猜一波結論->過不了樣例,先看b題->b題動態樹,似乎可以肝lct->不會維護重鏈&#xff0c…

課時39.細線表格(理解)

請你設計出以下圖片里的這個樣式的表格 步驟: 我先來制作一個兩行兩列的表格 2.將table里的cellspacing設置成0 外邊距是不見了,但是和我們想要完成的圖片有一定的差距,我們發現這樣做出來的圖片好像是兩條線合并到了一起一樣,實…

強制Tomcat通過SLF4J / Logback登錄

因此,您將JAR可執行Web應用程序與Tomcat捆綁在一起 (請務必先閱讀其中一個)。 但是,開頭有這些煩人的Tomcat日志,與我們的應用程序日志無關,并且不可自定義: Nov 24, 2012 11:44:02 PM org.apa…

matlab拼碎紙片過程,碎紙片拼接復原模型

1. 引言破碎文件的拼接在司法物證復原、歷史文獻修復以及軍事情報獲取等領域都有著重要的應用。企事業、機關、院校和軍隊基于保密的需要,使用碎紙機對重要文件,單據以及材料進行銷毀。一些重要的文件隨著時間流逝,殘破不全,因此&…

python實現貝葉斯分類器_python實現簡單的樸素貝葉斯分類器

本文使用的測試問題是“皮馬印第安人糖尿病問題”這個問題包括768個對于皮馬印第安患者的醫療觀測細節,記錄所描述的瞬時測量取自患者的年齡,懷孕和血液檢查的次數。所有患者都是21歲以上的女性,所有屬性都是數值型,而且屬性的單位…

VC++編譯MPIR 2.7.0

目錄 第1章編譯 2 1.1 簡介 2 1.2 下載 3 1.3 解決方案 4 1.4 創建項目 5 1.5 復制文件樹 6 1.6 不使用預編譯頭文件 8 1.7 包含目錄 9 1.8 定義宏 10 1.9 編譯前事件 11 1.10 修改 obj 的位置 13 1.11 編譯yasm 14 1.12 編譯匯編代碼 …

PHP大數據處理【轉】

1:硬件方面 普通的一個p4的服務器每天最多能支持大約10萬左右的IP,如果訪問量超過10W那么需要專用的服務器才能解決,如果硬件不給力 軟件怎么優化都是于事無補的。主要影響服務器的速度 有:網絡-硬盤讀寫速度-內存大小-cpu處理速度…

http1.X與2.0

HTTP HTTP 1.X HTTP是建立在TCP協議上的,HTTP協議的瓶頸及優化都是基于TCP協議本身的特性。TCP建立連接時有三次握手 會有1.5RTT的延遲,為了避免每次請求都經歷握手待來的延遲,應用層會選擇不同策略的http長連接。 HTTP 1.0 連接不能復用以…