Lift和Scala的受欢迎程序仍在不断升温,越来越多的公司开始采用scala和Lift搭建自己的企业应用。在我写这篇文章之时,scala已推出了2.8.1版,Lift则推出了2.2-RC2,增加很多令人心动的特性。scala和lift的开发工具也越来越完善,其中Intellij Idea+ SBT的组合最受scala开发者的欢迎。在这边文章中我将详细介绍如何利用Intellij Idea + SBT从头开始搭建一个完美的开发的环境。由于我之前写过一篇相似的文章,所有很多细节接在这篇文章中省略。大家可以参考
这里。
首先安装最新版本的idea社区版,写这篇文章时的最新版本的10.0。然后用其插件管理器安装最新的scala开发插件。接着使用maven的archetype建立一个lift maven工程。
mvn archetype:generate -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-basic_2.8.0 -DarchetypeVersion=2.1 -DarchetypeRepository=http://scala-tools.org/repo-releases -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=demo.lift -DartifactId=helloworld -Dversion=1.0
然后将其导入到idea中。修改project目录下的build.properties的内容为:
project.organization=demo.lift
project.name=helloworld
project.version=1.0
sbt.version=0.7.4
def.scala.version=2.8.0
build.scala.versions=2.8.0
project.initialize=false
修改LiftProject.scala的内容为:
import sbt._
class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) {
override def scanDirectories = Nil
// Add Maven Local repository for SBT to search for (disable if this doesn't suit you)
val mavenLocal = "Local Maven Repository" at "file://"+Path.userHome+"/.m2/repository"
val lift = "net.liftweb" %% "lift-mapper" % "2.1" % "compile"
val jetty6 = "org.mortbay.jetty" % "jetty" % "6.1.25" % "test"
val h2 = "com.h2database" % "h2" % "1.2.121" % "runtime"
val servlet = "javax.servlet" % "servlet-api" % "2.5" % "provided"
val junit = "junit" % "junit" % "3.8.1" % "test"
}
关于为什么需要这样设置,请参考Lift的
wiki。
接下来就是使用SBT来对工程进行初始化。首先到
SBT主页下载最新版本的SBT(现在最新版是0.7.4),然后将其安装到自己的操作系统。这里只介绍windows下的安装,其它系统下的安装方法请参考其主页的文档。
在windows下安装SBT的步骤:
第一步:将sbt-launch.jar放到一个不包含空格和中文的目录下,例如c:\bin。
第二步:在sbt-launch.jar的同级目录新建一个脚本,取名sbt.bat。
set SCRIPT_DIR=%~dp0
java -Xmx512M -jar "%SCRIPT_DIR%sbt-launch.jar" %*
第三步:将该目录加入到windows的Path变量中,以便可以在任何地方使用sbt命令。
在SBT安装完成后,打开cmd,进入到刚才生成的maven工程的目录,运行sbt,sbt会根据pom.xml的配置自动下载依赖的包;运行jetty-run,待jetty启动完成后,访问http://localhsot:8080就可以看到我们可爱的helloworld界面了。
SBT提供了对scala应用从开发到测试以及部署全周期管理,更多关于SBT的使用只是请参考SBT的主页的相关文档。这里再介绍一下如何一起使用SBT和JRebel。
欲在SBT中使用JRebel,需要在两个地方进行配置:
1)修改LiftProject.scala,加入
override def scanDirectories = Nil
这样jetty将停止自动加载应用。
2)修改sbt.bat,在sbt启动时加载jrebel
set SCRIPT_DIR=%~dp0
java -noverify -javaagent:/path/to/jrebel/jrebel.jar -Xmx512M -jar "%SCRIPT_DIR%sbt-launch.jar" %*
在进行上述修改配置后,重新启动sbt,这时可以留意到sbt启动的同时加载了jrebel,运行"update","jetty-run", "~compile","~compile"会让sbt实时的编译改动过的scala类。
让我们测试一下sbt+idea+jrebel的强大威力!在idea中修改 snippet下的 HelloWorld.scala,保存,可以在sbt console中看到输出的实时编译信息。刷新页面,可以马上看到改变。十分完美!
总结:
Intellij Idea是目前最好的scala ide,但其编译scala的速度偏慢;sbt提供了对scala应用从开发到测试部署的全生命周期管理,可以实时编译scala文件;jrebel让你不需要重启服务器就可以看到修改的效果。它们的组合是开发Scala、Lift应用的瑞士军刀,让你无往不利!