首页 > 其他 > 详细

scala 101

时间:2014-04-15 09:12:22      阅读:533      评论:0      收藏:0      [点我收藏+]

* 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 脚本:

1
2
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文件

实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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中增加:

1
2
3
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

scala 101,布布扣,bubuko.com

scala 101

原文:http://www.cnblogs.com/foreveryl/p/3664237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!