您的位置:首页 > 其它

使用sbt搭建Scala开发环境的总结

2013-02-26 15:25 405 查看
Scala是一种运行于JVM之上的新型语言。JRuby,Jython,Groovy等也可以将其他语言的一些特点带进Java的生态圈。但就个人体会,这些编程语言和Scala相比,如同Symbian之于Android或IOS。虽然大家都是一个圈子里面的,但完全不在同一个时代。加之PlayFramework的助力,Scala的路会越走越宽。对于企业开发,Scala最大的障碍不在对之前Java产品的支持,而在程序员的数量上。Scala的切入点很好,因为它是强类型的语言,在运行的性能上远超出JRuby,Jython,Groovy,执行效率与Native的Java程序几无差别。在对Java的互操作方面体现很好,这就保证了企业可在使用Scala的开发中保证了之前Java软件产品的投资不会丢失。而它带入的函数式编程,对多线程编程的良好支持,为开发大量并发应用体现出优势。(这也是PlayFramework的亮点)

回到现实,Scala短期内还无迹象被业界大规模采用。但如果打算将Scala带进企业开发,最好的出发点可能是自动化测试和支持软件开发的工具。对于这两方面,大多数企业的态度是,知道长期来看它的好处,但不愿在眼下去投资。如果要想做些事情,程序员不得不牺牲自己的业余时间。而Scala用于此再合适不过。所以下面我将Scala项目的开发搭建搭建做了一个总结。学语言,学以致用,用它去做一些正经的事情。

1.安装、配置需要的软件

Scala:http://www.scala-lang.org/downloads

ScalaIDE:http://scala-ide.org/

Scala-sbt:http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html

因为sbt会使用ivy作为库管理工具。ivy默认把libraryrepository建在userhome下面。Unix/Linux/MacOS都还好说,如果就一个分区(或一个逻辑分区),无所谓发在哪个位置啦。如果操作系统是Windows,有分了C:D:E:等若干分区,还是不要放在默认的%USERPROFILE%下面,C盘会随着开发的项目越来越多,大量的空间被开发库所占用。定制librarylocalrepository的位置的方法是:

修改sbt配置文件:[sbt安装目录]\conf\sbtconfig.txt

文件中添加一行:-Dsbt.ivy.home=E:/dev/ivy/

用sbt创建,运行,测试和发布项目都很方便,但这还不够,软件开发是要写代码的。而务实的开发者都会用现代的IDE去写代码。用写字板,vi或其他文本编辑做开发,更多的是体现一种编程文化的象征意义,正经干活没必要放着更先进的好东西不用。安装sbteclipse插件https://github.com/typesafehub/sbteclipse,可以在sbtconsole里面生成eclipsescalaproject。更为有用的是,sbteclipse在生成项目时会根据build.sbt里面定义的库依赖,生成一个.classpath文件。也就是已经把EclipseScala项目的classpath,设置好了。如果以后的开发中有使用新的第三方库,安装如下次序,可以更新classpath的配置

1).在build.sbt里面定义库依赖

2).在sbtconsole里面执行update命令,下载相应的库到locallibraryrepository

3).在sbtconsole里面执行eclipse命令,更新classpath设置

2.用sbt创建项目

这里用一个例子来说明:

f:\tmp\test>dir
VolumeindriveFisfile
VolumeSerialNumberisA646-F0A7

Directoryoff:\tmp\test

02/19/201302:09PM<DIR>.
02/19/201302:09PM<DIR>..
02/19/201311:04AM269build.sbt
02/19/201302:08PM<DIR>target
1File(s)269bytes
3Dir(s)29,323,710,464bytesfree

f:\tmp\test>typebuild.sbt
name:="ProjectPlan"

version:="1.0"

scalaVersion:="2.9.2"

libraryDependencies++=Seq(
"org.mongodb"%%"casbah"%"2.5.0",
"net.sourceforge"%"mpxj"%"4.3.0"
)


f:\tmp\test>sbt
[info]LoadingglobalpluginsfromC:\Users\gzhang\.sbt\plugins
[info]SetcurrentprojecttoProjectPlan(inbuildfile:/F:/tmp/test/)
>eclipse
[info]AbouttocreateEclipseprojectfilesforyourproject(s).
[info]Updating{file:/F:/tmp/test/}default-c4a35f...
[info]Resolvingorg.scala-lang#scala-library;2.9.2...
[info]Resolvingorg.mongodb#casbah_2.9.2;2.5.0...
[info]Resolvingorg.mongodb#casbah-commons_2.9.2;2.5.0...
[info]Resolvingcom.github.nscala-time#nscala-time_2.9.2;0.2.0...
[info]Resolvingjoda-time#joda-time;2.1...
[info]Resolvingorg.joda#joda-convert;1.2...
[info]Resolvingorg.specs2#specs2_2.9.2;1.12.2...
[info]Resolvingorg.specs2#specs2-scalaz-core_2.9.2;6.0.1...
[info]Resolvingorg.slf4j#slf4j-api;1.6.0...
[info]Resolvingorg.mongodb#mongo-java-driver;2.10.1...
[info]Resolvingorg.mongodb#casbah-core_2.9.2;2.5.0...
[info]Resolvingorg.mongodb#casbah-query_2.9.2;2.5.0...
[info]Resolvingorg.mongodb#casbah-gridfs_2.9.2;2.5.0...
[info]Resolvingnet.sourceforge#mpxj;4.3.0...
[info]Resolvingorg.apache.poi#poi;3.7...
[info]Resolvingjunit#junit;3.8.1...
[info]Doneupdating.
[info]SuccessfullycreatedEclipseprojectfilesforproject(s):
[info]ProjectPlan
>exit

f:\tmp\test>tree
FolderPATHlistingforvolumefile
VolumeserialnumberisA646-F0A7
F:.
├─project
│└─target
│└─config-classes
├─src
│├─main
││├─java
││└─scala
│└─test
│├─java
│└─scala
└─target
├─scala-2.9.2
│└─cache
│└─update
└─streams
└─$global
├─ivy-configuration
│└─$global
├─ivy-sbt
│└─$global
├─project-descriptors
│└─$global
└─update
└─$global

其中,

定义build.sbt文件,请参照sbt的文档:http://www.scala-sbt.org/release/docs/index.html。特别说明的是,当添加一个依赖库的时候,通过MavenCentralRepositorySearch来查找很便捷。比如,项目需要使用MongoDB的driver

在MavenCentralRepository里面查找”mongodb“:





点击所需库的版本号到ArtifactDetails页面:





展开ScalaSBT,将里面的DependencyInformation拷贝粘贴到build.sbt文件里面,然后在sbtconsole里面运用update,eclipse。下载库,配置项目的classpath就自动完成了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: