亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        大型Java項目中Gradle的應(yīng)用

        2014-04-29 00:44:03王毅敏
        中國電子商情 2014年5期
        關(guān)鍵詞:子項目腳本代碼

        王毅敏

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

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

        一、多Module的項目

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

        (一)配置子項目

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

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

        (二)共享配置

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

        (三)獨享配置

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

        (四)其他共享

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

        二、環(huán)境的配置

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

        (一)Properties配置

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

        (二)替換

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

        (三)初始化數(shù)據(jù)庫

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

        三、代碼質(zhì)量

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

        (一)CheckStyle

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

        (二)FindBugs

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

        (三)JDepend

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

        (四)PMD

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

        四、依賴

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

        (一)Jar包依賴管理

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

        (二)子項目之間的依賴

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

        (三)構(gòu)建腳本的依賴

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

        五、其他

        (一)apply其他Gradle文件

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

        (二)project的目錄

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

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

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

        (四)使用gradle.properties文件

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

        結(jié)束語

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

        參考文獻(xiàn)

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

        (作者單位:南京工業(yè)職業(yè)技術(shù)學(xué)院 國際教育學(xué)院)

        猜你喜歡
        子項目腳本代碼
        酒駕
        服務(wù)進程中消費者對子項目順序的遵從性研究
        活性炭為中心綜合項目總體布局
        山西化工(2021年4期)2021-01-25 14:15:18
        安奇奇與小cool 龍(第二回)
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        數(shù)據(jù)庫系統(tǒng)shell腳本應(yīng)用
        電子測試(2018年14期)2018-09-26 06:04:24
        快樂假期
        免费看欧美日韩一区二区三区| 综合色就爱涩涩涩综合婷婷| av人摸人人人澡人人超碰妓女| 国产亚洲蜜芽精品久久| 国产精品国产三级国产an| 最新在线观看免费的a站国产| 国产乱对白刺激视频| 免费a级毛片无码a| 国内精品视频成人一区二区| 国产一区资源在线播放| 97人伦影院a级毛片| 女人做爰高潮呻吟17分钟| 国产成人综合久久精品推荐免费| 国产一区二区三区小向美奈子| 亚洲欧美v国产一区二区| 嗯啊哦快使劲呻吟高潮视频 | 亚洲国产成人aⅴ毛片大全| 国产一区二区av在线免费观看| 后入到高潮免费观看| 国产精品久久久久久麻豆一区| 国产一区二区在线观看我不卡| 一区二区三区午夜视频在线| 人妻体体内射精一区二区| 香蕉视频一级| 午夜精品人妻中字字幕| 亚洲最新无码中文字幕久久| 国产精品美女一区二区三区| 欧美黑人xxxx性高清版| av在线免费观看麻豆| …日韩人妻无码精品一专区| 国产精品公开免费视频| 日韩人妻免费一区二区三区| 99精品国产在热久久无毒不卡| 日韩人妻无码一区二区三区久久99| 亚洲精品乱码久久久久99| 蜜桃视频第一区免费观看| 欧美午夜刺激影院| 亚洲AV无码一区二区二三区我| 精品国产一区二区三区av新片| 中文无码成人免费视频在线观看| 一级免费毛片|