用spacemacs+sbt打造scala,spark开发ide

为什么用spacemacs?

  • spacemacs集成了很多语言,python,c++,scala等,可以在一个编辑器中实现多种语言的编写,没有编辑器切换之痛。
  • spacemacs 占用资源非常小,不像IntelliJ,eclipse 系列编辑器,占用内存很大,启动非常慢。
  • 全键盘操作,不用切换鼠标,达到沉浸式编程。

效果

代码自动提示

环境

系统:ubuntu16.04
sbt:0.13.6(1.0版本测试有问题)
scala:2.11.6
spark library :1.6.1
jdk: 1.8

配置

安装jdk和scala教程不在此赘述,网上随处可见,需要有JAVA_HOME环境变量。spacemacs的安装查看官网,文档写的比较清楚,不在此写具体的安装配置。

  1. 安装sbt
sudo apt-get install sbt=0.13.6

在命令行运行sbt 等待下载相应依赖包,完成后,会在~/.sbt 目录下生成0.13目录。

mkdir plugins
vim plugins.sbt

添加如下代码,保存

addSbtPlugin("org.ensime" % "sbt-ensime" % "latest.integration")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "latest.integration")

在系统~目录下执行sbt 命令等待下载及安装插件

  1. 配置项目
    在项目根目录创建build.sbt,添加相应的库依赖及项目定义。
    注意:中间需要留有代码中所示空行。
name := "Hello"

version := "1.0"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "1.6.1" % "compile",
  "org.apache.spark" %% "spark-mllib" % "1.6.1" % "compile"
)

assemblyJarName in assembly := s"${name.value.replace(' ','-')}-${version.value}.jar"

assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false)

执行sbt,等待依赖库下载完成。
在sbt命令行中,执行ensimeConfig命令,生成ensime配置文件。
编辑配置文件,修改.ensime文件,如果仅仅做scala开发,这块直接就可以用了,并不需要修改ensime配置文件,因为我经常用到spark,所以对其进行了修改添加了相应的library文件。

:library-jars ("/home/brook/.sbt/boot/scala-2.10.4/lib/scala-library.jar"  "/home/brook/.ivy2/cache/org.apache.spark/spark-core_2.10/jars/spark-core_2.10-1.6.1.jar" "/home/brook/.ivy2/cache/org.apache.spark/spark-mllib_2.10/jars/spark-mllib_2.10-1.6.1.jar")

此处默认只有scala-library 这个jar文件,后边两个是后加的。
(注意:直接添加spark官方提供的library文件,由于太大,会导致cpu极高,所以我把spark用到的library 换成了sbt 自动下载的jar包,在用户主目录下.ivy2下都可以相应的找到。)
以上配置完成,就可以愉快的编码了。

3.运行

我是直接在项目根目录执行一下命令 : sbt run
spacemacs集成的sbt,不能执行完立即退出sbt,在代码出错的一些情况,例如由于bug sparkcontext不能退出,sbt 会一直尝试链接spark导致,导致cpu占用极高。所以直接执行sbt run ,有bug了sbt 也能停止尝试连接spark。

推荐阅读更多精彩内容