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。变通的方法如下
- 运行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-, 跳转到之前的位置
emacs+ensime+sbt打造spark源码阅读环境的更多相关文章
- win7+idea+maven搭建spark源码阅读环境
1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...
- 编译spark源码及塔建源码阅读环境
编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...
- Spark源码分析环境搭建
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...
- Mac搭建Hadoop源码阅读环境
1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...
- 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建
基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...
- Sping学习笔记(一)----Spring源码阅读环境的搭建
idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...
- Spring源码阅读笔记01:源码阅读环境准备
1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...
- Spring5源码阅读环境搭建-gradle构建编译
前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码. 在构建Spring源码阅 ...
- 【Java】用IDEA搭建源码阅读环境
用IDEA搭建源码阅读环境 参考自CodeSheep的Mac源码环境搭建, https://www.bilibili.com/video/BV1V7411U78L 但是实际上在Windows搭建的差别 ...
随机推荐
- Android之自定义控件深入
本文主要讲述两个知识点:popwindow的使用和通过继承View实现一个自定义控件,实现点击,手动按钮的效果. popwindow的使用 //定义 popupWindow popWin = new ...
- 菜鸟学Linux命令:bg fg jobs命令 任务管理
jobs命令 jobs命令用于查看当前终端后台运行的任务 注意和ps的区别: ps命令用于查看瞬间进程的动态 通过一个实例可以理解它们之间的区别,依次执行如下命令:vim & //后台执行vi ...
- Oracle Undo与脏读解析
Undo就是用来记录保存事务操作过程中的数据,如果事务发生错误,可以之前的数据进行填补. Undo segment 是保存在表空间上的.Undo 大小是固定的,既然是固定的也就是有限的.如果保存的记录 ...
- Linux创建用户并赋予Root权限
添加普通用户 [root@server ~]# useradd test //添加一个名为test的用户[root@server ~]# passwd test //修改密码Changing pass ...
- php生成二维码的插件phpqrcode
参考网址: http://www.thinkphp.cn/topic/7749.html http://blog.csdn.net/stxyc/article/details/44650971 php ...
- 由文章缩略图读出banner图
<div class="banner"> {dede:sql sql="select litpic FROM #@__archives where typei ...
- android 项目中规范使用SharedPreferences
一.SharedPreferences是什么来的? SharedPreferences是Android四种数据存储技术中的一种(SharedPreferences.SQLite.Content Pro ...
- [MySQL]安装和启动
一 MySQL简介 1)MySQL MySQL是MySQL AB公司的数据库管理系统软件,是最流行的开源(Open Source,开放源代码)的关系型数据库管理系统. 2) MySQL具有以下主要特点 ...
- python 把函数作为参数 ---高阶函数
把函数作为参数 在2.1小节中,我们讲了高阶函数的概念,并编写了一个简单的高阶函数: def add(x, y, f): return f(x) + f(y) 如果传入abs作为参数f的值: add( ...
- Memcached启停脚本小结
编写配置文件 编写启动脚本 vim /etc/rc.d/init.d/memcached startesac and $<!= 0); } elsif (open PIDHANDLE," ...