利用Gradle如何构建scala多模块工程的步骤详解

 更新时间:2018年04月23日 10:27:14   作者:robin  
这篇文章主要给大家介绍了关于如何利用Gradle构建scala多模块工程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

Scala是一门强大的语言,受到很多人的喜爱,我也曾经尝试学习过。不过Scala官网专用的构建工具SBT就不那么好用了。我曾经想将SBT的软件包保存路径设置到D盘,还想设置网络代理,不过最后都没搞明白怎么回事。相信也有很多同学想学习Scala,但是却被SBT挡在了门外。偶然之下我发现现在Gradle增加了scala插件,可以完美支持Scala项目。

前段时间终于无法忍受sbt慢如龟速的编译打包速度了。稍稍调研了一下,就果断切换到了gradle。由于调研得比较匆忙,在使用过程中遇到了各种问题。好在最后都能解决了。

我这里使用scala主要是用来编写spark job。由于我自己的一些需要,这些job中有几个是多模块的。在这里简单解释一下如何使用gradle构建scala多模块项目。

这里用我最近开发的项目来做说明。项目名称是consumer-portrait-job,有两个子模块:common和compute。

步骤如下

首先在项目根目录下创建一个settings.gradle文件,这个文件主要用来描述项目名称及子模块信息:

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

然后再创建一个build.gradle文件。这个文件描述了主项目及子项目的一些通用配置。配置如下:

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() }
 }
}

在这个配置文件中包含两个大的模块:allprojects和subprojects。

allprojects中的配置是所有项目共享的(包含根项目)。在这里,我定义了项目的groupId和version等信息,并应用了gradle的idea插件。

subprojects的配置是所有子项目通用的。

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

接下来的配置项“sourceCompatibility”声明了编译时使用的jdk版本;“targetCompatibility”确保了编译生成的class与指定版本的jdk兼容。

在ext中声明了子项目中可以使用的一些变量。我这里是声明了scala和spark的版本。

repositories项配置了当前项目可以使用的仓库。这里使用的第一个仓库是本机的maven库,第二库是ali提供的repository服务,第三个库是maven中央库。(曾经研究过如何让gradle和maven公用同一个本地仓库,不过最后也是不了了之)。

dependencies中声明了所有子模块都需要使用的依赖项。这里用到了scala库和spark库,这两个库只会在编译期用到,所以声明使用的依赖类型是compileOnly(这种依赖类型是gradle Java插件独有的,gradle scala插件继承自java插件,所以也可以使用)。

task mkdirs是一个自定义任务。在根项目配置完settings.gradle和build.gradle后,执行“gradle mkdirs”命令完成子模块目录的创建工作。

在两个子模块common和compute下创建build.gradle文件并做配置。

common模块的build.gradle配置详情:

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

这里只是声明了一下commons模块独有的依赖项。

compute模块是启动模块,在该模块中有spark任务的驱动类。该模块的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模块的依赖项。其中略需注意的是对common模块的依赖。

接下来的jar声明指明了将该模块打成的jar包的名称。脚本中需要根据包名来调用模块生成的包,默认生成的包名会带上版本信息,不太合适。

最后是一个自定义任务。该任务的目标是将一些必要的jar和其他文件打成一个zip包,以便于上传任务到执行服务器。任务中的第一个部分是将一些运行时依赖打入zip包中的lib目录,使用include关键字提示包含运行时依赖中指定名称的包,也可以使用exclude关键字排除一些包。第二部分是将生成的jar和本地doc目录中的文件打入zip包的根目录。

就这样。有空再写个示例项目留着参考。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Scala基础语法总结

    Scala基础语法总结

    这篇文章主要介绍了Scala基础语法总结,需要的朋友可以参考下
    2023-10-10
  • Scala基础简介及代码示例

    Scala基础简介及代码示例

    这篇文章主要介绍了Scala基础简介及代码示例,小编觉得挺不错的,这里给大家分享下,供需要的朋友参考。
    2017-10-10
  • 利用Gradle如何构建scala多模块工程的步骤详解

    利用Gradle如何构建scala多模块工程的步骤详解

    这篇文章主要给大家介绍了关于如何利用Gradle构建scala多模块工程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • Scala实现二分查找的代码实例

    Scala实现二分查找的代码实例

    这篇文章主要介绍了Scala实现二分查找的代码实例,找到数组的中间值,和需要查找的值进行对比:如果中间值等于查找值,直接返回中间值下标;如果中间值大于查找值,则递归向左边查找;如果中间值小于查找值,则递归向右边查找,直到找完所有的元素,需要的朋友可以参考下
    2023-11-11
  • 浅谈Scala的Class、Object和Apply()方法

    浅谈Scala的Class、Object和Apply()方法

    下面小编就为大家带来一篇浅谈Scala的Class、Object和Apply()方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Scala安装及环境图文配置教程

    Scala安装及环境图文配置教程

    这篇文章主要为大家详细介绍了Scala安装及环境图文配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    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排序算法之归并排序解析,简介:归并排序是一种经典的排序算法,它采用分治的思想,将待排序的数组不断地分割成小的子数组,然后再将这些子数组合并成有序的数组,需要的朋友可以参考下
    2023-10-10

最新评论