`
jgsj
  • 浏览: 966880 次
文章分类
社区版块
存档分类
最新评论

Scala开发环境选型: Sublime + sbt + Ensime

 
阅读更多

今天在Scala开发环境的选择上纠结了比较久,尝试了Scala IDE,IntelliJ IDEA,也尝试了maven + scala-maven-plugin,最终选择投靠sbt,并且选择Sublime作为编辑器,加上sublime-ensime这个插件。


Scala IDE & IntelliJ IDEA

Scala IDE和Eclipse长得差不多,亲切度较高,且加上Maven for Scala插件之后,可以直接创建Scala的maven项目。我下载来的3.0+版本的scala IDE可以直接创建scala maven项目,并且会生成如下项目结构。但是Scala IDE不具备代码提示功能,高亮的字段不是很全面,且maven相比sbt还是逊色一些。还有一个问题是ScalaIDE不是很完善,有一些小问题。我使用它来看Spark项目的源码,并不选择其作为开发环境。


IntelliJ IDEA的话可能是很多Scala开发者的首选。对我来说,不太熟悉IntelliJ IDEA,刚起步的话还是考虑能快速熟悉和起步,IntelliJ IDEA好像也是支持sbt的。以后我可能会转战到IntelliJ IDEA的平台。


Sublime + sbt +Ensime

sublime还算是一个比较简单又实用的编辑器,很多人会拿它来写脚本语言,适合Win和Mac环境。

sbt的话就不用说了,应该是比maven强大些,而且既然写scala的话,理应尽量去投靠sbt。它有一点比maven方便的地方,就是在sbt console里面,敲 ~complie之后,可以即时编译,如果你有两个屏幕的话,可以在另一块屏幕上看到刚刚敲入并保存的代码编译有没有问题。sbt入门的话可以参看github上的一份文档。sbt的依赖和管理更简洁,又同maven有相同之处,所以也很好上手。

Ensime是github上的一个项目,为Sublime Text 2(Sublime Text 3无法使用,因为两个内置python版本不同,ensime有些python文件需要执行)做的插件,是Sublime下的外部package,我使用之后提炼出它的几点功能(即为Sublime补充的一些内容):

  1. 自己写的类可以通过 ctrl + 鼠标点击 跳转
  2. 没有引入或依赖的包,类,会提示报错
  3. ctrl+alt+b 可以build整个工程,相当于sbt下面敲compile也会build工程一样
  4. alt + i 可以给指定的类显示可以选择导入的目标包,并自动添加import
Ensime需要ctrl + F5启动,Sublime关闭后会停掉。以下是它默认的键盘快捷键支持:

[
  { "keys": ["f9"], "command": "ensime_toggle_breakpoint" },
  { "keys": ["ctrl+shift+f9"], "command": "ensime_clear_breakpoints" },
  { "keys": ["ctrl+f5"], "command": "ensime_startup" },
  { "keys": ["ctrl+shift+f5"], "command": "ensime_shutdown" },
  { "keys": ["f5"], "command": "ensime_smart_run_debugger" },
  { "keys": ["shift+f5"], "command": "ensime_stop_debugger" },
  { "keys": ["f11"], "command": "ensime_step_into" },
  { "keys": ["f10"], "command": "ensime_step_over" },
  { "keys": ["alt+i"], "command": "ensime_add_import" },
  { "keys": ["ctrl+shift+b"], "command": "ensime_build" }
]
更多Ensime的安装,用法和介绍可以参考github主页,安装和使用很简单。


sbt spark0.8 依赖的一个问题

仅仅在build.sbt下增加

libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.9.3" % "0.8.0-incubating"
)
然后build的话,会出错,提示

unresolved dependency: com.typesafe.akka#akka-actor;2.0.5: not found
不仅仅是akka-actor,事实上akka-xx的2.0.5都会not found。奇怪的是我在maven环境下,pom.xml里同样是

<dependency> <!-- Spark dependency -->
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.9.3</artifactId>
      <version>0.8.0-incubating</version>
 </dependency>
是可以成功导入spark-0.8所有需要的依赖的。因此,我的解决方法是让sbt去使用maven的本地仓库,使用一次后sbt自己的本地仓库里就有akka的相关2.0.5的包了,下面给出我的完整build.sbt内容,

name := "hi-scala"

organization := "com.baidu.smartq"

version := "0.0.1-SNAPSHOT"

scalaVersion := "2.9.3"

resolvers ++= Seq(
  "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/",
  "Local Maven Repo" at "C://Users/zhangbaofeng/.m2/repository"
)

libraryDependencies ++= Seq(
  "org.mongodb" %% "casbah" % "2.6.3",
  "org.slf4j" % "slf4j-api" % "1.6.4",
  "org.slf4j" % "slf4j-simple" % "1.6.4",
  "org.apache.spark" % "spark-core_2.9.3" % "0.8.0-incubating"
)

ivyXML :=
<dependency org="org.eclipse.jetty.orbit" name="javax.servlet" rev="2.5.0.v201103041518">
  <artifact name="javax.servlet" type="orbit" ext="jar"/>
</dependency>
最后的ivyXML部分也是为了一个包而增加上去的,它的报错是下面这个包引起的

org.eclipse.jetty.orbit#javax.servlet;2.5.0.v201103041518!javax.servlet.orbit
添加近ivyXML这段之后就okay了。该问题参考spark-use mailing list里的一个问题


总结

本文介绍了我的Scala开发环境选型,简单对比了取舍的原因。然后针对sbt下spark-0.8包部分包无法加载问题给出了解决方案,并帖出了完整可用的build.sbt内容。希望可以给同样是起步学习Scala的同学一些帮助。


(全文完)


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics