scala 101

* 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

相關文章
相關標籤/搜索