歡迎轉載,轉載請注明出處,徽滬一郎.
概述
Scala越來越流行, Spark也愈來愈紅火, 對spark的代碼進行走讀也成了一個很普遍的行為。不巧的是,當前java社區中很流行的ide如eclipse,netbeans對scala的支持都不算太好。在這種情況下不得不想到編輯器之神emacs,利用emacs+ensime來打造scala編程環境。
本文講述的步驟全部是在arch linux上,其它發行版的linux視具體情況變通。
安裝scala
pacman -S scala
安裝sbt
pacman -S sbt
安裝ensime
yaourt -S ensime
添加如下代碼到$HOME/.emacs中
(add-to-list 'load-path "/usr/share/ensime/elisp") (add-to-list 'exec-path "/usr/share/ensime") (require 'ensime) (add-hook 'scala-mode-hook 'ensime-scala-mode-hook)
運行sbt
sbt
首次運行sbt會解決依賴,下載必須的包。生成$HOME/.sbt/0.13目錄,假設當前的sbt版本是0.13的話。
創建plugin.sbt
cd ~/.sbt/0.13 mkdir -p plugins cd plugins touch plugin.sbt
在plugin.sbt中添加如下內容
addSbtPlugin("org.ensime" % "ensime-sbt-cmd" % "0.1.2")
再次運行sbt, sbt會自動下載ensime plugin
下載spark源碼
假設下載的spark源碼解壓在$HOME/working目錄。到些為止,准備工作都差不多了,開始真正的使用吧。
生成.ensime文件
spark采用maven進行編譯管理,所以不能像一般的sbt工程那樣直接使用ensime generate。變通的方法如下
- 運行emacs, 在emacs中打開SparkContext.scala具體什么源文件不重要,這里只是一個比方
- 在emacs中運行ensime-config-gen,按照提示一步步執行,最終生成.ensime
如何回答ensime-config-gen中的每一個問題,下面的screenshot給出了明確的示例。
指定根目錄
設定項目類型,選擇yes
指定項目名稱,spark
package的名稱 org.apache.spark
指定源文件目錄
指定所依賴的包所在位置
scala的標准庫所在位置,選擇 N
指定生成的classess被保存在哪個目錄,選擇默認
至此,配置完成,在spark-0.9.0-incubating/core/src/main能夠打到.ensime文件
運行ensime
一旦生成了.ensime,就可以直接在emacs中喚起ensime了,M-X進入minibuffer,輸入ensime
確認.ensime的位置
.ensime加載進來之后,狀態欄上的"No Connection"提示信息消失,取而代之的是“spark analyzing",表明正在進行源文件的indexing.
ensime指令簡明指南
ensime環境搭建完畢,具體指令的話請查看ensime官網上的manual.
由於我是進行源碼走讀,所以比較注重代碼的調用和跳轉。
將光標移動某一個類的起始定義處 如class SparkContext,然后調用快捷鍵c-c c-v i 列出SparkContext的變量與函數
c-c c-v p 列出當前package中的所有類
c-c c-v v 查找某一個方法或類
c-c c-v r 查看當前函數在哪些地方被調用,類似於source insight中的calling或eclipse中的calling hierarchy功能
alt-. 跳轉到函數或類的定義處
alt-, 跳轉到之前的位置