emacs+ensime+sbt打造spark源碼閱讀環境


歡迎轉載,轉載請注明出處,徽滬一郎.

概述

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。變通的方法如下

  1. 運行emacs, 在emacs中打開SparkContext.scala具體什么源文件不重要,這里只是一個比方
  2. 在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-, 跳轉到之前的位置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM