- Use this lift-archetype-basic archetype which is hosted on http://scala-tools.org/repo-release.
mvn archetype:generate -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-basic_2.9.1 -DarchetypeRepository=http://scala-tools.org/repo-releases -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=com.dynamicobjx -DartifactId=lift-chat -Dversion=1.0
- This will prompt if you want the default version and configuration. Then you should change scala version to latest version. As of now the version is 2.9.1, that also change lift version which is 2.4.
- If you had error on dependency life-mapper, change the dependency definition by changing artifactId to life-mapper_2.9.1.
- If you had an error on test classes, this is due to its incompatibility to scala 2.9.1. Therefore, you have to change its artifact id of org.scala-tools.testing from specs to specs_2.9.1 and make the version to 1.6.9.
Now, resolve all the dependencies and make the project an eclipse project (eclipse is my prefered IDE) by executing:
mvn dependency:resolve eclipse:eclipse -DdownloadSources=true -DdownloadJavadocs=true
This will download all the dependencies you defined on pom. You explicitly also say to download sources and javadocs using -DdownloadSources=true -DdownloadJavadocs=true (parameter for eclipse:eclipse). eclipse:eclipse is the command that let the maven project to be open on eclipse, this goal create files like .project, .classpath, .wtpmodels and .components that is needed by eclipse.
After that you can now import it to your eclipse. The structure of the project must be like this:
To run the project you use:
To run, with auto-compile if source code is change use this:
If you want an on-the-fly reloading of changes made on Java class file, try to use JRebel. Right now, I don’t add it to my dependencies.
After running jetty:run goal, the output project can be seen on 0.0.0.0:9080.
At the end of today’s experience of mine on scala and lift, I found out that the Boot.scala file is the main Class of the project and its main page is index.html based on the sitemap() method of Boot class.
<lift:surround with="default" at="content">
<h2>Welcome to your project!</h2>
<span>Welcome to lift-chat at <b:time/></span>
This means that this html will be surrounded by the default.html content, where the enclosing content of list:surround will be placed on default.html on the place where lift:bind name=”content” is defined.
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/">
<div class="column span-12 last" style="text-align: right">
<h1 class="alt">lift-chat<img alt="" id="ajax-loader" style="display:none; margin-bottom: 0px; margin-left: 5px" src="/images/ajax-loader.gif"/></h1>
<div class="column span-6 colborder sidebar">
<hr class="space" />
<hr class="space" />
<div class="column span-17 last">
<lift:bind name="content" /> <!-- this is where the content of index.html be injected -->
<div class="column span-23 last" style="text-align: center">
is Copyright 2007-2010 WorldWide Conferencing, LLC. Distributed under an Apache 2.0 License.</h4>
(On index.html) Also <b: time> is also a binding tags, in here the value of b:time is defined on Helloworld.howdy. The binding tags is <lift:hellowWOrld.howdy>. in howdy method, they bind the b:time tags to the current time and date.