打造更完美的Lift开发环境:Lift + SBT + Intellij Idea + JRebel

woxiaozhi 2010-12-16

Lift和Scala的受欢迎程序仍在不断升温,越来越多的公司开始采用scala和Lift搭建自己的企业应用。在我写这篇文章之时,scala已推出了2.8.1版,Lift则推出了2.2-RC2,增加很多令人心动的特性。scala和lift的开发工具也越来越完善,其中IntellijIdea+SBT的组合最受scala开发者的欢迎。在这边文章中我将详细介绍如何利用IntellijIdea+SBT从头开始搭建一个完美的开发的环境。由于我之前写过一篇相似的文章,所有很多细节接在这篇文章中省略。大家可以参考这里。

首先安装最新版本的idea社区版,写这篇文章时的最新版本的10.0。然后用其插件管理器安装最新的scala开发插件。接着使用maven的archetype建立一个liftmaven工程。

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,保存,可以在sbtconsole中看到输出的实时编译信息。刷新页面,可以马上看到改变。十分完美!

总结:

IntellijIdea是目前最好的scalaide,但其编译scala的速度偏慢;sbt提供了对scala应用从开发到测试部署的全生命周期管理,可以实时编译scala文件;jrebel让你不需要重启服务器就可以看到修改的效果。它们的组合是开发Scala、Lift应用的瑞士军刀,让你无往不利!

相关推荐