Scala是一種運行於JVM之上的新型語言。JRuby, Jython, Groovy等也能夠將其餘語言的一些特色帶進Java的生態圈。但就我的體會,這些編程語言和Scala相比,如同Symbian之於Android或IOS。雖然你們都是一個圈子裏面的,但徹底不在同一個時代。加之Play Framework的助力,Scala的路會越走越寬。對於企業開發,Scala最大的障礙不在對以前Java產品的支持,而在程序員的數量上。Scala的切入點很好,由於它是強類型的語言,在運行的性能上遠超出JRuby, Jython, Groovy,執行效率與Native的Java程序幾無差異。在對Java的互操做方面體現很好,這就保證了企業可在使用Scala的開發中保證了以前Java軟件產品的投資不會丟失。而它帶入的函數式編程,對多線程編程的良好支持,爲開發大量併發應用體現出優點。(這也是Play Framework的亮點) html
回到現實,Scala短時間內還無跡象被業界大規模採用。但若是打算將Scala帶進企業開發,最好的出發點多是自動化測試和支持軟件開發的工具。對於這兩方面,大多數企業的態度是,知道長期來看它的好處,但不肯在眼下去投資。若是要想作些事情,程序員不得不犧牲本身的業餘時間。而Scala用於此再合適不過。因此下面我將Scala項目的開發搭建搭建作了一個總結。學語言,學以至用,用它去作一些正經的事情。 java
Scala: http://www.scala-lang.org/downloads git
Scala IDE: http://scala-ide.org/ 程序員
Scala-sbt: http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html github
由於sbt會使用ivy做爲庫管理工具。ivy默認把library repository建在user home下面。Unix/Linux/Mac OS都還好說,若是就一個分區(或一個邏輯分區),無所謂發在哪一個位置啦。若是操做系統是Windows,有分了C: D: E: 等若干分區,仍是不要放在默認的%USERPROFILE%下面,C盤會隨着開發的項目愈來愈多,大量的空間被開發庫所佔用。定製library local repository的位置的方法是: mongodb
修改sbt配置文件:[sbt安裝目錄]\conf\sbtconfig.txt apache
文件中添加一行: -Dsbt.ivy.home=E:/dev/ivy/ 編程
用sbt建立,運行,測試和發佈項目都很方便,但這還不夠,軟件開發是要寫代碼的。而務實的開發者都會用現代的IDE去寫代碼。用寫字板,vi或其餘文本編輯作開發,更多的是體現一種編程文化的象徵意義,正經幹活不必放着更先進的好東西不用。安裝sbteclipse插件https://github.com/typesafehub/sbteclipse, 能夠在sbt console裏面生成eclipse scala project。更爲有用的是,sbteclipse在生成項目時會根據build.sbt裏面定義的庫依賴,生成一個.classpath文件。也就是已經把Eclipse Scala項目的classpath,設置好了。若是之後的開發中有使用新的第三方庫,安裝以下次序,能夠更新classpath的配置 api
1). 在build.sbt裏面定義庫依賴 多線程
2). 在sbt console裏面執行update命令,下載相應的庫到local library repository
3). 在sbt console裏面執行eclipse命令,更新classpath設置
這裏用一個例子來講明:
f:\tmp\test>dir
Volume in drive F is file
Volume Serial Number is A646-F0A7
Directory of f:\tmp\test
02/19/2013 02:09 PM <DIR> .
02/19/2013 02:09 PM <DIR> ..
02/19/2013 11:04 AM 269 build.sbt
02/19/2013 02:08 PM <DIR> target
1 File(s) 269 bytes
3 Dir(s) 29,323,710,464 bytes free
f:\tmp\test>type build.sbt
name := "Project Plan"
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] Loading global plugins from C:\Users\gzhang\.sbt\plugins
[info] Set current project to Project Plan (in build file:/F:/tmp/test/)
> eclipse
[info] About to create Eclipse project files for your project(s).
[info] Updating {file:/F:/tmp/test/}default-c4a35f...
[info] Resolving org.scala-lang#scala-library;2.9.2 ...
[info] Resolving org.mongodb#casbah_2.9.2;2.5.0 ...
[info] Resolving org.mongodb#casbah-commons_2.9.2;2.5.0 ...
[info] Resolving com.github.nscala-time#nscala-time_2.9.2;0.2.0 ...
[info] Resolving joda-time#joda-time;2.1 ...
[info] Resolving org.joda#joda-convert;1.2 ...
[info] Resolving org.specs2#specs2_2.9.2;1.12.2 ...
[info] Resolving org.specs2#specs2-scalaz-core_2.9.2;6.0.1 ...
[info] Resolving org.slf4j#slf4j-api;1.6.0 ...
[info] Resolving org.mongodb#mongo-java-driver;2.10.1 ...
[info] Resolving org.mongodb#casbah-core_2.9.2;2.5.0 ...
[info] Resolving org.mongodb#casbah-query_2.9.2;2.5.0 ...
[info] Resolving org.mongodb#casbah-gridfs_2.9.2;2.5.0 ...
[info] Resolving net.sourceforge#mpxj;4.3.0 ...
[info] Resolving org.apache.poi#poi;3.7 ...
[info] Resolving junit#junit;3.8.1 ...
[info] Done updating.
[info] Successfully created Eclipse project files for project(s):
[info] Project Plan
> exit
f:\tmp\test>tree
Folder PATH listing for volume file
Volume serial number is A646-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。 特別說明的是,當添加一個依賴庫的時候,經過Maven Central Repository Search來查找很便捷。好比,項目須要使用Mongo DB的driver
在Maven Central Repository裏面查找」mongodb「:
點擊所需庫的版本號到Artifact Details頁面:
展開Scala SBT,將裏面的Dependency Information拷貝粘貼到build.sbt文件裏面,而後在sbt console裏面運用update,eclipse。下載庫,配置項目的classpath就自動完成了。