Transition to Scala 2.8 and Lift 2.1 turned the usual beginner trails impenetrable. It took me more than a week to figure out how to start with Lift on IntelliJ if you use Scala 2.8. Here's my experience.
First, I have to thank Sim for scala/lift/sbt cheatsheet for the Scala 2.7.7 version.
So, what is the problem? Scala 2.8.0 is too new, and if you just started learning Scala Lift, and you do not want to go back to 2.7.7, you discover yourself in murky waters of undocumented failures, just because you have to figure out where exactly you should find the new code, how to run sbt, what to do with maven, and, most importantly, how can you start developing anything - probably in IntelliJ, which has the most mature Scala plugin at the time of this writing.
I did carefully read (many times) the "sbt cheatsheet" referenced above, and, well, it is good, but the problem is, it is no good with Scala 2.8.0.
So this is my story.
You are familiar with Scala; you use IntelliJ for development; you are aware of the magic of sbt; now you want to try Lift for your experimental web app.
You just bought a Scala Lift book, or you go to Lift Getting Started page, or to another Lift Getting Started page, and you encounter two problems:
You do not know where to start;
When you follow the hints, some important steps are missing;
Or you succeed, but you wind up with older versions of Scala, Lift, prototype code.
We have to fix this.
You probably already have the following installed:
But this is not our goal; we want a project for IntelliJ.
Preparing IntelliJ Project
You already have Scala plugin. You will need sbt and maven plugins installed and enabled. File→Settings→Plugins is where you find this.
After installing sbt plugin, go to Settings→SBT and set the right location of sbt.jar
File→New Project...→Import project from external model
As a root, select the directory .../lift_21_sbt where you have the newly-generated pom.xml file.
IntelliJ will discover myFirstLiftApp:lift_21_sbt:1.0-SNAPSHOT; click through Next and Finish. In a minute or two you will see a project created; you could compile it...
You are all set. Tweak the code ad libitum, compile...
You may want to fix run configuration for scala console:
Run -> Edit Configurations -> Edit Defaults; go to the Before launch options, uncheck Make and choose Run SBT Action / jetty-run.
Then, when you have your code open, run it; sbt will launch jetty while you have scala console; here I am at loss on why do we need this console. But jetty works!
Creating Deployment War
You are still running sbt, right? type package - and very soon you can find in .../lift_21_sbt/target/scala_2.8.0 a war file (with a weird name). You can deploy this file in Tomcat or Jetty, on your server - it runs the sample Lift app when launched.
I'm confused on editing the Idea run configuration. When I click on "Run|Edit Configurations|Edit Default, I get a dialog box as expected, but there is a long list of defaults to choose from -- AIR, Applet, Flex, Maven, Rails, etc. I do see 4 scala related ones ... Scala compilation server, scala console, Scala script, Scala test. Is it one of these I'm supposed to do the "Before launch ... " on? I'm currently using the "scala console" setting. It works, but after my program compiles, the Idea window leaves me at the scala console prompt "scala>" -- which is to be expected I guess since that is the configuration I'm doing "Before launch" on. Is this the recommended default setup?
> I'm confused on editing the Idea run configuration. When > I click on "Run|Edit Configurations|Edit Default, I get a > dialog box as expected, but there is a long list of > defaults to choose from -- AIR, Applet, Flex, Maven, > Rails, etc. I do see 4 scala related ones ... Scala > compilation server, scala console, Scala script, Scala > test. Is it one of these I'm supposed to do the "Before > launch ... " on?
Right, I never tried it. I'll remove it from the text, then will try to figure out what's the right thing to do. Thanks!
I've tried to set "Before launch.." scala console. But it didn't work for. I would just flood my console with bunch of Downloading ... message and localhost:8080 wouldn't work. I did it on Scala compilation server and it seems working. But still not sure what Vlad had in mind.