为什么用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的安装查看官网,文档写的比较清楚,不在此写具体的安装配置。
- 安装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 命令等待下载及安装插件
- 配置项目
在项目根目录创建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。