欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Gradle如何構(gòu)建scala多模塊工程的步驟詳解

 更新時(shí)間:2018年04月23日 10:27:14   作者:robin  
這篇文章主要給大家介紹了關(guān)于如何利用Gradle構(gòu)建scala多模塊工程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

前言

Scala是一門強(qiáng)大的語言,受到很多人的喜愛,我也曾經(jīng)嘗試學(xué)習(xí)過。不過Scala官網(wǎng)專用的構(gòu)建工具SBT就不那么好用了。我曾經(jīng)想將SBT的軟件包保存路徑設(shè)置到D盤,還想設(shè)置網(wǎng)絡(luò)代理,不過最后都沒搞明白怎么回事。相信也有很多同學(xué)想學(xué)習(xí)Scala,但是卻被SBT擋在了門外。偶然之下我發(fā)現(xiàn)現(xiàn)在Gradle增加了scala插件,可以完美支持Scala項(xiàng)目。

前段時(shí)間終于無法忍受sbt慢如龜速的編譯打包速度了。稍稍調(diào)研了一下,就果斷切換到了gradle。由于調(diào)研得比較匆忙,在使用過程中遇到了各種問題。好在最后都能解決了。

我這里使用scala主要是用來編寫spark job。由于我自己的一些需要,這些job中有幾個(gè)是多模塊的。在這里簡(jiǎn)單解釋一下如何使用gradle構(gòu)建scala多模塊項(xiàng)目。

這里用我最近開發(fā)的項(xiàng)目來做說明。項(xiàng)目名稱是consumer-portrait-job,有兩個(gè)子模塊:common和compute。

步驟如下

首先在項(xiàng)目根目錄下創(chuàng)建一個(gè)settings.gradle文件,這個(gè)文件主要用來描述項(xiàng)目名稱及子模塊信息:

rootProject.name = 'consumer-portrait-job'
include 'common', 'compute'

然后再創(chuàng)建一個(gè)build.gradle文件。這個(gè)文件描述了主項(xiàng)目及子項(xiàng)目的一些通用配置。配置如下:

allprojects {
 apply plugin: 'idea'
 group = 'com.zhyea.portrait'
 version = '0.1-SNAPSHOT'
}
 
subprojects {
 apply plugin: 'scala'
 sourceCompatibility = 1.7
 targetCompatibility = 1.7
 ext {
  scalaVersion = '2.10.5'
  sparkVersion = '1.4.1'
 }
 
 repositories {
  mavenLocal()
  maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
  mavenCentral()
 }
 
 dependencies {
  testCompile group: 'junit', name: 'junit', version: '4.12'
  compileOnly group: 'org.apache.spark', name: 'spark-core_2.10', version: sparkVersion
  compileOnly group: 'org.scala-lang', name: 'scala-compiler', version: scalaVersion
 }
 
 task mkdirs() {
  sourceSets*.scala.srcDirs*.each { it.mkdirs() }
  sourceSets*.resources.srcDirs*.each { it.mkdirs() }
 }
}

在這個(gè)配置文件中包含兩個(gè)大的模塊:allprojects和subprojects。

allprojects中的配置是所有項(xiàng)目共享的(包含根項(xiàng)目)。在這里,我定義了項(xiàng)目的groupId和version等信息,并應(yīng)用了gradle的idea插件。

subprojects的配置是所有子項(xiàng)目通用的。

在subprojects中的第一行聲明了使用gradle的scala插件。

接下來的配置項(xiàng)“sourceCompatibility”聲明了編譯時(shí)使用的jdk版本;“targetCompatibility”確保了編譯生成的class與指定版本的jdk兼容。

在ext中聲明了子項(xiàng)目中可以使用的一些變量。我這里是聲明了scala和spark的版本。

repositories項(xiàng)配置了當(dāng)前項(xiàng)目可以使用的倉庫。這里使用的第一個(gè)倉庫是本機(jī)的maven庫,第二庫是ali提供的repository服務(wù),第三個(gè)庫是maven中央庫。(曾經(jīng)研究過如何讓gradle和maven公用同一個(gè)本地倉庫,不過最后也是不了了之)。

dependencies中聲明了所有子模塊都需要使用的依賴項(xiàng)。這里用到了scala庫和spark庫,這兩個(gè)庫只會(huì)在編譯期用到,所以聲明使用的依賴類型是compileOnly(這種依賴類型是gradle Java插件獨(dú)有的,gradle scala插件繼承自java插件,所以也可以使用)。

task mkdirs是一個(gè)自定義任務(wù)。在根項(xiàng)目配置完settings.gradle和build.gradle后,執(zhí)行“gradle mkdirs”命令完成子模塊目錄的創(chuàng)建工作。

在兩個(gè)子模塊common和compute下創(chuàng)建build.gradle文件并做配置。

common模塊的build.gradle配置詳情:

project(':common') {
  dependencies {
    compile group: 'com.typesafe', name: 'config', version: '1.3.2'
  }
}

這里只是聲明了一下commons模塊獨(dú)有的依賴項(xiàng)。

compute模塊是啟動(dòng)模塊,在該模塊中有spark任務(wù)的驅(qū)動(dòng)類。該模塊的build.gradle配置詳情:

project(':compute') {
  dependencies {
    compile project(":common")
    compileOnly group: 'org.apache.spark', name: 'spark-sql_2.10', version: sparkVersion
    compile group: 'net.liftweb', name: 'lift-json_2.10', version: '2.6.3'
  }
 
  jar {
    archiveName = 'consumer-portrait.jar'
  }
 
  task zip(type: Zip) {
    into('lib') {
      from(configurations.runtime) {
include '*typesafe*', '*common*', '*bitmap-core*', '*RoaringBitmap*'
      }
    }
    into('') {
      from jar
      from 'doc'
    }
  }
}

配置中的第一行dependencies仍然是配置compute模塊的依賴項(xiàng)。其中略需注意的是對(duì)common模塊的依賴。

接下來的jar聲明指明了將該模塊打成的jar包的名稱。腳本中需要根據(jù)包名來調(diào)用模塊生成的包,默認(rèn)生成的包名會(huì)帶上版本信息,不太合適。

最后是一個(gè)自定義任務(wù)。該任務(wù)的目標(biāo)是將一些必要的jar和其他文件打成一個(gè)zip包,以便于上傳任務(wù)到執(zhí)行服務(wù)器。任務(wù)中的第一個(gè)部分是將一些運(yùn)行時(shí)依賴打入zip包中的lib目錄,使用include關(guān)鍵字提示包含運(yùn)行時(shí)依賴中指定名稱的包,也可以使用exclude關(guān)鍵字排除一些包。第二部分是將生成的jar和本地doc目錄中的文件打入zip包的根目錄。

就這樣。有空再寫個(gè)示例項(xiàng)目留著參考。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Scala基礎(chǔ)語法總結(jié)

    Scala基礎(chǔ)語法總結(jié)

    這篇文章主要介紹了Scala基礎(chǔ)語法總結(jié),需要的朋友可以參考下
    2023-10-10
  • Scala基礎(chǔ)簡(jiǎn)介及代碼示例

    Scala基礎(chǔ)簡(jiǎn)介及代碼示例

    這篇文章主要介紹了Scala基礎(chǔ)簡(jiǎn)介及代碼示例,小編覺得挺不錯(cuò)的,這里給大家分享下,供需要的朋友參考。
    2017-10-10
  • 利用Gradle如何構(gòu)建scala多模塊工程的步驟詳解

    利用Gradle如何構(gòu)建scala多模塊工程的步驟詳解

    這篇文章主要給大家介紹了關(guān)于如何利用Gradle構(gòu)建scala多模塊工程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • Scala實(shí)現(xiàn)二分查找的代碼實(shí)例

    Scala實(shí)現(xiàn)二分查找的代碼實(shí)例

    這篇文章主要介紹了Scala實(shí)現(xiàn)二分查找的代碼實(shí)例,找到數(shù)組的中間值,和需要查找的值進(jìn)行對(duì)比:如果中間值等于查找值,直接返回中間值下標(biāo);如果中間值大于查找值,則遞歸向左邊查找;如果中間值小于查找值,則遞歸向右邊查找,直到找完所有的元素,需要的朋友可以參考下
    2023-11-11
  • 淺談Scala的Class、Object和Apply()方法

    淺談Scala的Class、Object和Apply()方法

    下面小編就為大家?guī)硪黄獪\談Scala的Class、Object和Apply()方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Scala安裝及環(huán)境圖文配置教程

    Scala安裝及環(huán)境圖文配置教程

    這篇文章主要為大家詳細(xì)介紹了Scala安裝及環(huán)境圖文配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Windows7下安裝Scala 2.9.2教程

    Windows7下安裝Scala 2.9.2教程

    這篇文章主要介紹了Windows7下安裝Scala 2.9.2教程,本文給出了Scala的安裝步驟以及在Eclipse IDE安裝Scala的步驟,需要的朋友可以參考下
    2015-03-03
  • Scala排序算法之歸并排序解析

    Scala排序算法之歸并排序解析

    這篇文章主要介紹了Java排序算法之歸并排序解析,簡(jiǎn)介:歸并排序是一種經(jīng)典的排序算法,它采用分治的思想,將待排序的數(shù)組不斷地分割成小的子數(shù)組,然后再將這些子數(shù)組合并成有序的數(shù)組,需要的朋友可以參考下
    2023-10-10

最新評(píng)論