• scala 101


    * scala 安装:

    下载可以执行的文件. 注意版本.  spark 0.8.0 对应的scala 为2.9.3

    * scala 编译: 和java 很像:

    1,  直接编译脚本:

    scalac HelloWorld.scala

    scala -classpath . HelloWorld

    2, sbt 打包编译.  类比maven

    1), 安装sbt. 官网下载, 里面主要是sbt-langh.jar

    sbt 脚本:

    SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
    java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
    

    chmod a+x sbt 使其成为可执行文件.  

    显然, sbt 脚本中调用 sbt-launch.jar 来完成实际的工作. 

    2), 项目目录结构:

    $ find .
    .
    ./simple.sbt
    ./src
    ./src/main
    ./src/main/scala
    ./src/main/scala/SimpleJob.scala

    是不是和maven一样?!

    3), 其中 simple.sbt 相当于pom文件

    实例如下:

    import AssemblyKeys._
    
    seq(assemblySettings: _*)
    
    name := "simple_project"
    
    version := "1.0"
    
    scalaVersion := "2.9.3"
    
    libraryDependencies ++= Seq(
      ("org.apache.spark" %% "spark-core" % "0.8.1-incubating").
        exclude("org.mortbay.jetty", "servlet-api").
        exclude("commons-beanutils", "commons-beanutils-core").
        exclude("commons-collections", "commons-collections").
        exclude("commons-collections", "commons-collections").
        exclude("com.esotericsoftware.minlog", "minlog")
    )
    
    mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
      {
        case PathList("javax", "servlet", xs @ _*)         => MergeStrategy.first
        case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first
        case "application.conf" => MergeStrategy.concat
        case "unwanted.txt"     => MergeStrategy.discard
        case x => old(x)
      }
    }
    
    resolvers += "Akka Repository" at "http://repo.akka.io/releases/"
    

    打包命令:

    sbt package

    执行:

    sbt run

    * 注意, sbt文件两行之间必须有空行..  否则有 unexpect eof 等报错.. 

    为啥有这样的规定, 表示很奇怪.  注意就行.  不差这一下回车 :)

    4), 如何对项目将所有依赖达成jar 包, 用于线上系统的部署?

    A: 使用插件: sbt assembly

    a), 在project/plugins.sbt 中增加一行:

    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.2")

    b), 在simple.sbt中增加:

    import AssemblyKeys._
    
    seq(assemblySettings: _*)
    

    c), 运行命令: sbt assembly

    打完的包在target/scala-*/中.  simple_project-assembly-....jar

    可以对比下和sbt package编译出来包的大小~~

    注意这里里面可能有重复依赖的问题... 

    参考上面给的simple.dat文件给出的解决方法. 

    为啥能解决问题. 表示也不清楚, 直接给连接吧:

    https://github.com/sbt/sbt-assembly#excluding-jars-and-files  解决多个包依赖不同版本的问题. 

    https://github.com/sbt/sbt-assembly#merge-strategy   解决同一个包, 被多次依赖的问题. 

    * 其他scala入门资料:

    scala 程序入门: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala2/ 

    scala  tutorial: http://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/ScalaTutorial-zh_CN.pdf

    spark 官方 scala 程序中文版: http://www.cnblogs.com/vincent-hv/p/3298416.html 

    END

  • 相关阅读:
    第二阶段第九天站立会议总结
    第二阶段第八天站立会议总结
    第二阶段第七天站立会议总结
    第二阶段第六天站立会议总结
    第二阶段第五天站立会议总结
    第二阶段第四天站立会议总结
    第二阶段第三天站立会议总结
    第二阶段第二天站立会议总结
    7nm FinFET 版图的特点
    [ Skill ] 键位不够用之 Menu
  • 原文地址:https://www.cnblogs.com/foreveryl/p/3664237.html
Copyright © 2020-2023  润新知