美文网首页程序员
SBT Multi-projects 配置

SBT Multi-projects 配置

作者: 哈比猪 | 来源:发表于2016-09-07 14:23 被阅读0次

    Spark简介

    Spark已经成为一个很热门的数据分析和计算工具,它支持多种语言(Java,python,scala,R),而spark本身是由scala编写而成的,所以推荐第一次接触spark使用scala来编写spark程序,支持度比较高.

    Build Tool

    跟Java的maven一样,scala可以使用SBT(Simple Build Tool)来构建build项目结构,SBT名字上叫做一种“简单的构建工具”,其实个人觉得对新手并不是十分简单,可能是大家都习惯了Maven的方式吧. SBT具体的文档介绍可以自行参考SBT文档

    SBT Multi-project 简单配置

    在实际项目当中,大家都可能碰到多个项目放在一个目录下,需要独立运行,且各个子项目之间通过lib包依赖的情况,SBT也支持这种工程的build,下面简单介绍下如何定义目录结构和build文件:

    SBT工程目录结构

    可以按如下方式创建一个完整的工程目录:

    图 3-1 SBT工程目录结构
    • test-project/build.sbt: 是主工程根目录下的build文件,可以将主工程的包信息放在里面,一般来说最简单的sbt build环境就是只有根目录下的build文件,参考内容下:
    name := "test-project"
    version := "1.0"
    scalaVersion := "2.10.6"
    
    • test-project/project/build.scala: 每个根目录/project目录下可以放置一个build.sbt或者build.scala文件(SBT支持两种后缀方式的文件,具体可以参考SBT文档,这里不展开介绍),里面定义所有模块或者项目的build方式(包含主工程和子工程),所有build.scala里的内容在根目录下的build.sbt(也就是test-project/build.sbt)里面都是可见的,参考内容如下:
    import sbt._
    object MainProjectBuild extends Build {
      val sparkCore = "org.apache.spark" %% "spark-core" % "1.6.1" % "provided"
      val sparkHive = "org.apache.spark" %% "spark-hive" % "1.6.1" % "provided"
      val env = Option(System.getProperty("env")).getOrElse("dev")
        lazy val root = Project(
            id = "root", 
            base = file(".")
        ) aggregate(project1, project2, project3) settings(libraryDependencies ++= Seq(sparkCore, sparkHive)) 
        lazy val project1 = Project(
            id = "project1",
            base = file("project1")
        ) dependsOn(project2, project3) settings(libraryDependencies ++= Seq(sparkCore, sparkHive))
        lazy val project2= Project(
            id = "project2",
            base = file("project2"),
        ) settings(libraryDependencies ++= Seq(sparkCore, sparkHive)) 
        lazy val project3 = Project(
            id = "project3",
            base = file("project3")
        ) settings(libraryDependencies ++= Seq(sparkCore, sparkHive))
    }
    

    定义一个MainProjectBuild继承Build类,假设我们有三个子project,project1依赖2,3才能生成,root-project通过aggregate来指定并行生成三个子项目,每个子项目target下都会产生一个package,而project1通过dependsOn指定了project2,project3作为其依赖的一部分,每当project1编译的时候,必须先编译project2,project3,并且把2,3的代码作为project1的classpath一部分,然后project1才能编译,这样工程之间就实现了依赖,同时又维持了project2,project3包的独立性

    • test-project/project1/build.sbt: 各个子项目的包定义信息,具体如下所示:
    organization := "test.p1"
    name := "test-project-one"
    version := "1.0"
    scalaVersion := "2.10.5"
    

    test-project/project2/build.sbt 和 test-project/project3/build.sbt都是一样的配置,这样每个子项目生成包名字信息都是根据其目录下的build.sbt来指定的.

    相关文章

      网友评论

        本文标题:SBT Multi-projects 配置

        本文链接:https://www.haomeiwen.com/subject/lkyjettx.html