999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

大型Java項目中Gradle的應用

2014-04-29 00:44:03王毅敏
中國電子商情 2014年5期
關鍵詞:數據庫

王毅敏

引言:Gradle是基于Groovy語言的構建工具。本文闡述了如何利用Gradle構建易描述的、可維護的、簡潔的、高性能項目。

Gradle作為新的構建工具,它是基于Groovy語言的構建工具,既保持了Maven的優點,又通過使用Groovy定義的DSL[1],克服了Maven中使用XML繁冗以及不靈活等缺點。在最近這段時間里,我在使用Gradle作為構建腳本的大型Java項目上工作,更深切體會到Gradle在項目構建過程中是如此的簡單、易用。

一、多Module的項目

Maven的一個缺點就是:Maven不支持多module的構建。在Micro-Service架構風格流行的今天,在一個項目里面包含多個Module已成為一種趨勢。Gradle天然支持多module,并且提供了很多手段來簡化構建腳本。在Gradle中,一個模塊就是它的一個子項目(subproject),所以,我使用父項目來描述頂級項目,使用子項目來描述頂級項目下面的模塊。

(一)配置子項目

在多模塊的項目中,Gradle遵循慣例優于配置(Convention Over Configuration)原則。

在父項目的根目錄下尋找settings.gradle文件,在該文件中設置想要包括到項目構建中的子項目。在構建的初始化階段(Initialization),Gradle會根據settings.gradle文件來判斷有哪些子項目被include到了構建中,并為每一個子項目初始化一個Project對象,在構建腳本中通過project(‘:sub-project-name)來引用子項目對應的Project對象。通常,多模塊項目的目錄結構要求將子模塊放在父項目的根目錄下,但是如果有特殊的目錄結構,可以在settings.gradle文件中配置。

(二)共享配置

在大型Java項目中,子項目之間必然具有相同的配置項。我們在編寫代碼時,要追求代碼重用和代碼整潔;而在編寫Gradle腳本時,同樣需要保持代碼重用和代碼整潔。Gradle提供了不同的方式使不同的項目能夠共享配置。

(三)獨享配置

在項目中,除了設置共同配置之外,每個子項目還會有其獨有的配置。比如每個子項目具有不同的依賴以及每個子項目特殊的task等。Gradle提供了兩種方式來分別為每個子項目設置獨有的配置(1)在父項目的build.gradle文件中通過project(‘:sub-project-name)來設置對應的子項目的配置。(2)我們還可以在每個子項目的目錄里建立自己的構建腳本。對于子項目少,配置簡單的小型項目,推薦使用第一種方式配置,這樣就可以把所有的配置信息放在同一個build.gradle文件里。但是,若是對于子項目多,并且配置復雜的大型項目,使用第二種方式對項目進行配置會更好。因為,第二種配置方式將各個項目的配置分別放到單獨的build.gradle文件中去,可以方便設置和管理每個子項目的配置信息。

(四)其他共享

在Gradle中,除了上面提到的配置信息共享,還可以共享方法以及Task。可以在根目錄的build.gradle文件中添加所有子項目都需要的方法,在子項目的build.gradle文件中調用在父項目build.gradle腳本里定義的方法。

二、環境的配置

為了方便地將應用部署到開發、測試以及產品等不同環境上,Gradle提供了幾種不同的方式為不同的環境打包,使得不同的環境可以使用不同的配置文件。此外,它還提供了簡單的方法,使得我們能夠便捷地初始化數據庫。

(一)Properties配置

要為不同的環境提供不一樣的配置信息,Maven選擇使用profile,而Gradle則提供了兩種方法為構建腳本提供Properties配置:第一種方式是使用傳統的properties文件, 然后在使用Gradle時,通過傳入不同的參數加載不同的properties文件。例如,我們可以在項目中提供development.properties、test.properties和production.properties。在項目運行時,使用-Pprofile=development來指定加載開發環境的配置。另外一種方式就是使用Groovy的語法,定義可讀性更高的配置文件。

(二)替換

通過不同的方式加載不同環境的配置后,就需要把它們替換到有占位符的配置文件中去。在配置文件中使用@key@來標注要被替換的位置。

(三)初始化數據庫

在項目開發過程中,為了方便為不同環境構建相同的數據庫及數據,我們通常需創建數據庫的表以及插入一些初始化數據。Gradle目前沒有提供相關的Task或者Plugin,但是我們可以自己創建Task去運行SQL來初始化各個環境上的數據庫。前面也提到Gradle是Groovy定義的DSL,所以我們可以在Gradle中使用Groovy的代碼來執行SQL腳本文件。在Gradle腳本中,使用Groovy加載數據庫的Driver之后,就可以使用Groovy提供的Sql類去執行SQL來初始化數據庫了。

三、代碼質量

代碼質量是軟件開發質量的一部分,除了人工代碼評審之外,在把代碼提交到代碼庫之前,還應該使用自動檢查工具來自動檢查代碼,來保證項目的代碼質量。下面介紹一下Gradle提供的支持代碼檢查的插件。

(一)CheckStyle

CheckStyle是SourceForge下的一個項目,提供了一個幫助JAVA開發人員遵守某些編碼規范的工具。它能夠自動化代碼規范檢查過程,從而使得開發人員從這項重要卻枯燥的任務中解脫出來。

(二)FindBugs

FindBugs是一個靜態分析工具,它檢查類或者JAR文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。同樣也可以在FindBugs的配置階段(Configuration)設置其相關的屬性,比如Report的輸出目錄、檢查哪些sourceSet等。

(三)JDepend

在開發Java項目時經常會遇到關于包混亂的問題,JDepend工具可以幫助你在開發過程中隨時跟蹤每個包的依賴性(引用/被引用),從而設計高維護性的架構,不論是在打包發布還是版本升級都會更加輕松。在構建腳本中加入如下代碼即可:apply plugin: 'jdepend'

(四)PMD

PMD是一種開源分析Java代碼錯誤的工具。與其他分析工具不同的是,PMD通過靜態分析獲知代碼錯誤,即在不運行Java程序的情況下報告錯誤。PMD附帶了許多可以直接使用的規則,利用這些規則可以找出Java源程序的許多問題。

四、依賴

幾乎每個Java項目都會用到開源框架。同時,對于具有多個子模塊的項目來說,項目之間也會有所依賴。所以,管理項目中對開源框架和其他模塊的依賴是每個項目必須面對的問題。同時,Gradle也使用Repository來管理依賴。

(一)Jar包依賴管理

Gradle沿用Maven的依賴管理方法,通過groupId、name和version到配置的Repository里尋找指定的Jar包。同樣,它也提供了和Maven一樣的構建生命周期,compile、runtime、testCompile和testRuntime分別對應項目不同階段的依賴。

(二)子項目之間的依賴

對于多模塊的項目,項目中的某些模塊需要依賴于其他模塊,前面提到在初始化階段,Gradle為每個模塊都創建了一個Project對象,并且可以通過模塊的名字引用到該對象。在配置模塊之間的依賴時,使用這種方式可以告訴Gradle當前模塊依賴了哪些子模塊。

(三)構建腳本的依賴

除了項目需要依賴之外,構建腳本本身也可以有自己的依賴。當使用一個非Gradle官方提供的插件時,就需要在構建腳本里指定其依賴,當然還需要指定該插件的Repository。在Gradle中,使用buildscript塊為構建腳本配置依賴。

五、其他

(一)apply其他Gradle文件

當一個項目很復雜的時候,Gradle腳本也會很復雜,除了將子項目的配置移到對應項目的構建腳本之外,還可以按照不同的功能將復雜的構建腳本拆分成小的構建腳本,然后在build.gradle里使用apply from,將這些小的構建腳本引入到整體的構建腳本中去。

(二)project的目錄

在腳本文件中,需要訪問項目中的各級目錄結構。Gradle為Project對象定義了一些屬性指向項目的根目錄,方便在腳本中引用:rootDir:在子項目的腳本文件中可以通過該屬性訪問到根項目路徑。rootProject:在子項目中,可以通過該屬性獲取父項目的Project對象。

(三)使用Wrapper指定Gradle的版本

為了統一項目中Gradle的版本,可以在構建腳本中通過定義一個wrapper的Task,并在該Task中指定Gradle的版本以及存放Gradle的位置。

(四)使用gradle.properties文件

Gradle構建腳本會自動找同級目錄下的gradle.properties文件,在這個文件中可以定義一些property,以供構建腳本使用。

結束語

由于篇幅有限,本文只是我在一個大型Java項目上使用Gradle的部分經驗,并未涵蓋所有Gradle相關的知識。另外,Gradle是基于Groovy的構建工具,在使用Gradle的時候也需要了解和使用Groovy。所以,在學習Gradle插件的過程中,也能學會Groovy相關的用法,可謂一舉兩得。

參考文獻

[1]Wikipedia.Domain-specific language. http://en.wikipedia.org/wiki/Domain-specific_language.2013-11-8.

(作者單位:南京工業職業技術學院 國際教育學院)

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 日本成人福利视频| 日本影院一区| h视频在线观看网站| 免费国产福利| 9久久伊人精品综合| 色偷偷男人的天堂亚洲av| 亚洲综合色婷婷中文字幕| 久久久久亚洲精品成人网| 男女男精品视频| 国产精品嫩草影院av| 亚洲AV无码乱码在线观看代蜜桃 | 中文无码精品A∨在线观看不卡| 伊人久综合| 久热这里只有精品6| 四虎在线观看视频高清无码| 久操线在视频在线观看| 在线精品欧美日韩| 国产精品开放后亚洲| 日本黄色a视频| 亚洲手机在线| 国产精品熟女亚洲AV麻豆| 日韩欧美高清视频| 日本精品影院| 亚洲欧美另类中文字幕| 欧美狠狠干| 色播五月婷婷| 波多野结衣一级毛片| 国产精品女同一区三区五区| 91精品啪在线观看国产91| 第一区免费在线观看| 99热在线只有精品| 亚洲人成影视在线观看| 亚洲美女一区二区三区| 国产一级毛片在线| 精品亚洲国产成人AV| 久夜色精品国产噜噜| 婷婷综合亚洲| 国产剧情一区二区| 凹凸精品免费精品视频| 人妻无码一区二区视频| 亚洲91精品视频| 在线观看欧美国产| 91色在线视频| 国产SUV精品一区二区| 日本高清有码人妻| 亚洲看片网| 在线视频一区二区三区不卡| 亚洲无码在线午夜电影| 99精品免费欧美成人小视频| 国产18在线播放| 波多野衣结在线精品二区| 亚洲综合色婷婷中文字幕| 四虎亚洲国产成人久久精品| 国产精品极品美女自在线| 国产精品永久在线| 欧美69视频在线| 国产精品吹潮在线观看中文| 精品在线免费播放| 日韩欧美视频第一区在线观看| 91精品国产自产在线老师啪l| 色香蕉影院| 999国内精品视频免费| 一本大道香蕉中文日本不卡高清二区 | 91亚洲影院| 亚洲日韩精品伊甸| 色婷婷亚洲综合五月| 狠狠色丁香婷婷| 久久青草免费91线频观看不卡| 久热中文字幕在线| 欧美午夜视频| 日韩高清中文字幕| 欧美三级自拍| 无码国产偷倩在线播放老年人| 中文字幕调教一区二区视频| 日韩美女福利视频| 亚洲一级毛片在线观| 91成人在线免费观看| 亚洲一区网站| 久久精品这里只有精99品| 喷潮白浆直流在线播放| 亚洲综合色吧| 九九热精品视频在线|