Cet article montre comment monter rapidement un environnement de développement reposant sur
Maven ne sera utilisé dans ce tutorial qu'afin de monter rapidement un projet Lift fonctionnel selon le guide de démarrage.
J'utilise la dernière version de Java sous Ubuntu. Il s'agit de la version 1.6.
sudo aptitude install sun-java6-jdk
De manière générale, j'aime bien avoir mes outils installés dans ~/tools.
mkdir ~/tools
Je suppose aussi que ~/bin est disponible dans le PATH.
echo 'export PATH=$PATH:~/bin' >> ~/.bashrc
J'utilise la dernière version stable de Scala au moment de l'écriture de ce billet, à savoir la 2.7.7.
wget http://www.scala-lang.org/downloads/distrib/files/scala-2.7.7.final.tgz -O - | tar xvzf - -C ~/tools ln -s scala-2.7.7.final ~/tools/scala
Ajoutez dans ~/.bashrc :
export JAVA_HOME=/usr/lib/jvm/java-6-sun export PATH=$PATH:~/tools/scala/bin
J'utilise la dernière version stable de Maven au moment de l'écriture de ce billet, à savoir la 2.2.1.
cd ~/tools # utilise un mirroir que j'ai choisi au hasard wget http://apache.cs.utah.edu/maven/binaries/apache-maven-2.2.1-bin.tar.bz2 tar xvjf apache-maven-2.2.1-bin.tar.bz2
Ajoutez dans ~/.bashrc et n'oubliez pas de recharger la configuration :
export M2_HOME=~/tools/apache-maven-2.2.1 export M2=$M2_HOME/bin export PATH=$PATH:$M2
Le guide de démarrage nous propose d'utiliser Maven pour récupérer un projet Lift fonctionnel.
mkdir ~/tmp cd ~/tmp mvn archetype:create -U \ -DarchetypeGroupId=net.liftweb \ -DarchetypeArtifactId=lift-archetype-basic \ -DarchetypeVersion=1.0 \ -DremoteRepositories=http://scala-tools.org/repo-releases \ -DgroupId=net.liftweb.hello -DartifactId=hello-lift cd ~/tmp/hello-lift
wget http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.1.jar -O ~/tools/sbt-launch.jar echo 'java -Xmx512M -jar ~/tools/sbt-launch.jar "$@"' > ~/bin/sbt chmod u+x ~/bin/sbt
sbt devient notre outil de build par défault.
cd ~/tmp/hello-lift sbt Project does not exist, create new project? (y/N/s) : y Name: Hello Lift Organization []: W3C Version [1.0]: Scala version [2.7.5]: 2.7.7 sbt version [0.5.2]: 0.5.6
[Note] Je n'ai pas teste avec ces versions de Scala et sbt, et peut-etre que les versions par defaut seront deja les bonnes. Sico, tiens-moi au courant pour cette partie.
Pour quitter l'interpréteur sbt, il suffit d'envoyer un ctrl-d.
Nous configurons ensuite les dépendances.
cd ~/tmp/hello-lift
rm pom.xml
mkdir project/build
cat > project/build/HelloLiftProject.scala
import sbt._
class HelloLiftProject(info: ProjectInfo) extends DefaultWebProject(info)
{
val lift = "net.liftweb" % "lift-core" % "1.0" % "compile->default"
val jetty6 = "org.mortbay.jetty" % "jetty" % "6.1.14" % "test->default"
val servlet = "javax.servlet" % "servlet-api" % "2.5" % "provided->default"
val derby = "org.apache.derby" % "derby" % "10.2.2.0" % "runtime->default"
val junit = "junit" % "junit" % "3.8.1" % "test->default"
// required because Ivy doesn't pull repositories from poms
val smackRepo = "m2-repository-smack" at "http://maven.reucon.com/public"
}
Rechargez la configuration depuis sbt et lancez l'application.
sbt > reload > update > jetty-run
L'application est accessible à http://localhost:8080/.
Pour stopper Jetty, il suffit d'utiliser la commande suivante :
> jetty-stop
GNU emacs est un très bon éditeur mais il serait dommage de se priver d'un IDE avec complétion de code. Eclipse et le plugin Scala IDE for Eclipse remplissent très bien ce rôle.
Téléchargez Eclipse Classic 3.5.0 (161 MB). Pour ma part, le binaire se retrouve à ~/tools/eclipse/eclipse.
cd ~/tools wget http://carroll.aset.psu.edu/pub/eclipse/eclipse/downloads/drops/R-3.5-200906111540/eclipse-SDK-3.5-linux-gtk.tar.gz tar xvzf eclipse-SDK-3.5-linux-gtk.tar.gz
Voici une manière de tuner un peu la configuration d'Eclipse :
cat ~/tools/eclipse/eclipse.ini [...] --launcher.XXMaxPermSize 256m -vmargs -Xmx1024m -Xms256m -XX:MaxPermSize=256m -Xss1M -server -XX:+UseConcMarkSweepGC
Depuis Eclipse :
Il existe plusieurs façon d'intégrer le support de sbt dans Eclipse. J'ai choisi le support direct de sbt avec sbt-eclipse-plugin.
wget http://github.com/frank06/sbt-eclipse-plugin/raw/a37339b125625c9efe4713c6df537c3109626981/dist/sbt.eclipse_0.1.0.jar -P ~/tools/eclipse/plugins/
Depuis Eclipse :
LiftConsole.scala du package test.scalacd tools svn co http://lampsvn.epfl.ch/svn-repos/scala/scala-tool-support/trunk/src/emacs/ scala-mode
Put that in .emacs
(add-to-list 'load-path "/home/betehess/tools/scala-mode")
(require 'scala-mode-auto)
(add-hook 'scala-mode-hook
'(lambda ()
(yas/minor-mode-on)
))
Installez Mercurial sous Ubuntu le plus simplement possible :
sudo aptitude install mercurial
Configurez un minimum :
cat > ~/.hgrc [ui] username = Alexandre Bertails <bertails@w3.org> [extensions] color=
Création d'un fichier .hgignore adapté à ce genre de projet :
cat > ~/tmp/hello-lift/.hgignore syntax: glob .classpath .project .manager target lib_managed lift_example project/boot/ *~ *.class *.log
Enfin, initialisez le dépôt Mercurial.
cd ~/tmp/hello-lift hg init hg add hg commit -m "init"
Je n'ai jamais aimé laisser à Eclipse le soin de gérer mes projets Java/Scala. Il doit rester pour moi un éditeur. sbt gère très bien le redéploiement continu ainsi que les tests continus.
JavaRebel est un plugin JVM permettant automatisant le redéploiement à chaud lors de modifications de code. De plus, une licence gratuite pour les utilisateurs de Scala est disponible et son intégration avec Jetty et Tomcat est parfaite.
Téléchargez JavaRebel puis placez javarebel.jar dans ~/tools.
Téléchargez la licence JavaRebel pour Scala et placez là dans le même dossier que le jar.
wget http://www.zeroturnaround.com/pub/scala/javarebel.lic -P ~/tools
Désactivez le scan automatique des modifications par Jetty en ajoutant cette ligne dans ~/tmp/hello-lift/project/build/HelloLiftProject.scala :
override def scanDirectories = Nil
Configurez sbt pour qu'il utilise JavaRebel :
echo 'java -noverify -javaagent:/home/betehess/tools/javarebel.jar -Xmx512M -jar ~/tools/sbt-launcher.jar "$@"' > ~/bin/sbt
Enfin, activez le redéploiement continu depuis sbt :
sbt > jetty-run > ~ prepare-webapp
Discussion
Pour emacs sous windows il faut absolument renseigner la variable d'environnement HOME comme étant la racine du répertoire contenant emacs http://www.claremontmckenna.edu/math/alee/emacs/emacs.html