欢迎转载,转载请注明出处,徽沪一郎.

概述

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-, 跳转到之前的位置

emacs+ensime+sbt打造spark源码阅读环境的更多相关文章

  1. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  2. 编译spark源码及塔建源码阅读环境

    编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...

  3. Spark源码分析环境搭建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...

  4. Mac搭建Hadoop源码阅读环境

    1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...

  5. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  6. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  7. Spring源码阅读笔记01:源码阅读环境准备

    1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...

  8. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  9. 【Java】用IDEA搭建源码阅读环境

    用IDEA搭建源码阅读环境 参考自CodeSheep的Mac源码环境搭建, https://www.bilibili.com/video/BV1V7411U78L 但是实际上在Windows搭建的差别 ...

随机推荐

  1. dbVisualizer连接mysql

  2. 三星笔记本预装WIN8_降级WIN7方法

    相信很多人在近两年购买笔记本都会遇到这样的问题.预装系统是windows 8用着不习惯想换系统的请往下看.换windows 7  windows XP 设备方法相同 WIN8降级WIN7是要重新分区的 ...

  3. 网页制作技巧:iframe自适应高度

    转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...

  4. Android的四大组件

    Android的四大组件:Activity.Service.BroadcastReceiver.Content Provider. Content Provider 属于Android应用程序的组件之 ...

  5. C++的那些事:函数全解析

    一.函数的结构 函数在C++中可能出现在三种地方,一是函数的定义,它包括了如上图的结构:二是函数的声明,它与函数的定义相比,没有了函数体部分:三则是函数的调用.当然,不同的函数定义可以还会稍有不同,比 ...

  6. loj 1308(点双连通分量应用)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27016 题意:求一个连通图去掉任意一个点以及与它相连的边,图中的所 ...

  7. JavaScript表单提交四种方式

    总结JavaScript表单提交四种方式 <!DOCTYPE html> <html> <head> <title>JavaScript表单提交四种方式 ...

  8. 使用redis-cli定时执行指定命令

    50 20 * * * echo "del counterv2_real" | redis-cli -h hosts -a id:pwd --pipe

  9. Ajax过程

    http://www.cnblogs.com/daicunya/p/6227550.html 1.创建XMLHttpRequest对象,也就是创建一个异步调用对象. 2.创建一个新的HTTP请求,并指 ...

  10. 字符串集合或字符串数组转换成json数组

    字符串可以是List<String>类型的字符串集合,也可以是String[]类型的字符串数组,二者转换成JSON数组的方式没有什么不同.下面代码注意关键的部分即可(画红线部分). 1. ...