* 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) } } |
打包命令:
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
原文:http://www.cnblogs.com/foreveryl/p/3664237.html