閱讀263 返回首頁    go 魔獸


Scala開發環境選型: Sublime + sbt + Ensime

今天在Scala開發環境的選擇上糾結了比較久,嚐試了Scala IDE,IntelliJ IDEA,也嚐試了maven + scala-maven-plugin,最終選擇投靠sbt,並且選擇Sublime作為編輯器,加上sublime-ensime這個插件。


Scala IDE & IntelliJ IDEA

Scala IDE和Eclipse長得差不多,親切度較高,且加上Maven for Scala插件之後,可以直接創建Scala的maven項目。我下載來的3.0+版本的scala IDE可以直接創建scala maven項目,並且會生成如下項目結構。但是Scala IDE不具備代碼提示功能,高亮的字段不是很全麵,且maven相比sbt還是遜色一些。還有一個問題是ScalaIDE不是很完善,有一些小問題。我使用它來看Spark項目的源碼,並不選擇其作為開發環境。


IntelliJ IDEA的話可能是很多Scala開發者的首選。對我來說,不太熟悉IntelliJ IDEA,剛起步的話還是考慮能快速熟悉和起步,IntelliJ IDEA好像也是支持sbt的。以後我可能會轉戰到IntelliJ IDEA的平台。


Sublime + sbt + Ensime

sublime還算是一個比較簡單又實用的編輯器,很多人會拿它來寫腳本語言,適合Win和Mac環境。

sbt的話就不用說了,應該是比maven強大些,而且既然寫scala的話,理應盡量去投靠sbt。它有一點比maven方便的地方,就是在sbt console裏麵,敲 ~complie之後,可以即時編譯,如果你有兩個屏幕的話,可以在另一塊屏幕上看到剛剛敲入並保存的代碼編譯有沒有問題。sbt入門的話可以參看github上的一份文檔。sbt的依賴和管理更簡潔,又同maven有相同之處,所以也很好上手。

Ensime是github上的一個項目,為Sublime Text 2(Sublime Text 3無法使用,因為兩個內置python版本不同,ensime有些python文件需要執行)做的插件,是Sublime下的外部package,我使用之後提煉出它的幾點功能(即為Sublime補充的一些內容):

  1. 自己寫的類可以通過 ctrl + 鼠標點擊 跳轉
  2. 沒有引入或依賴的包,類,會提示報錯
  3. ctrl+alt+b 可以build整個工程,相當於sbt下麵敲compile也會build工程一樣
  4. alt + i 可以給指定的類顯示可以選擇導入的目標包,並自動添加import
Ensime需要ctrl + F5啟動,Sublime關閉後會停掉。以下是它默認的鍵盤快捷鍵支持:

[
  { "keys": ["f9"], "command": "ensime_toggle_breakpoint" },
  { "keys": ["ctrl+shift+f9"], "command": "ensime_clear_breakpoints" },
  { "keys": ["ctrl+f5"], "command": "ensime_startup" },
  { "keys": ["ctrl+shift+f5"], "command": "ensime_shutdown" },
  { "keys": ["f5"], "command": "ensime_smart_run_debugger" },
  { "keys": ["shift+f5"], "command": "ensime_stop_debugger" },
  { "keys": ["f11"], "command": "ensime_step_into" },
  { "keys": ["f10"], "command": "ensime_step_over" },
  { "keys": ["alt+i"], "command": "ensime_add_import" },
  { "keys": ["ctrl+shift+b"], "command": "ensime_build" }
]
更多Ensime的安裝,用法和介紹可以參考github主頁,安裝和使用很簡單。


sbt spark0.8 依賴的一個問題

僅僅在build.sbt下增加

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.9.3" % "0.8.0-incubating"
)
然後build的話,會出錯,提示

unresolved dependency: com.typesafe.akka#akka-actor;2.0.5: not found
不僅僅是akka-actor,事實上akka-xx的2.0.5都會not found。奇怪的是我在maven環境下,pom.xml裏同樣是

<dependency> <!-- Spark dependency -->
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.9.3</artifactId>
      <version>0.8.0-incubating</version>
 </dependency>
是可以成功導入spark-0.8所有需要的依賴的。因此,我的解決方法是讓sbt去使用maven的本地倉庫,使用一次後sbt自己的本地倉庫裏就有akka的相關2.0.5的包了,下麵給出我的完整build.sbt內容,

name := "hi-scala"

organization := "com.baidu.smartq"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.9.3"

resolvers ++= Seq(
  "Typesafe Repository" at "https://repo.typesafe.com/typesafe/releases/",
  "Local Maven Repo" at "C://Users/zhangbaofeng/.m2/repository"
)

libraryDependencies ++= Seq(
  "org.mongodb" %% "casbah" % "2.6.3",
  "org.slf4j" % "slf4j-api" % "1.6.4",
  "org.slf4j" % "slf4j-simple" % "1.6.4",
  "org.apache.spark" % "spark-core_2.9.3" % "0.8.0-incubating"
)

ivyXML :=
<dependency org="org.eclipse.jetty.orbit" name="javax.servlet" rev="2.5.0.v201103041518">
  <artifact name="javax.servlet" type="orbit" ext="jar"/>
</dependency>
最後的ivyXML部分也是為了一個包而增加上去的,它的報錯是下麵這個包引起的

org.eclipse.jetty.orbit#javax.servlet;2.5.0.v201103041518!javax.servlet.orbit
添加近ivyXML這段之後就okay了。該問題參考spark-use mailing list裏的一個問題


總結

本文介紹了我的Scala開發環境選型,簡單對比了取舍的原因。然後針對sbt下spark-0.8包部分包無法加載問題給出了解決方案,並帖出了完整可用的build.sbt內容。希望可以給同樣是起步學習Scala的同學一些幫助。


(全文完)


最後更新:2017-04-03 14:54:23

  上一篇:go 缺失version model的情況下能否完成Core Data的數據遷移?
  下一篇:go android 實現由下至上彈出並位於屏幕底部的提示框