* scala 安裝:javascript
下載能夠執行的文件. 注意版本. spark 0.8.0 對應的scala 爲2.9.3html
* scala 編譯: 和java 很像:java
1, 直接編譯腳本:linux
scalac HelloWorld.scalagit
scala -classpath . HelloWorldgithub
2, sbt 打包編譯. 類比mavenapache
1), 安裝sbt. 官網下載, 裏面主要是sbt-langh.jarapi
sbt 腳本:app
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
chmod a+x sbt 使其成爲可執行文件. maven
顯然, 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