Scala, List, sbt, Eclipse et Mercurial

Cet article montre comment monter rapidement un environnement de développement reposant sur

  • Scala en tant que langage de programmation
  • Lift en tant que framework web
  • sbt en tant qu'outil de build
  • Eclipse en tant qu'IDE
  • Mercurial pour la gestion de configuration

Maven ne sera utilisé dans ce tutorial qu'afin de monter rapidement un projet Lift fonctionnel selon le guide de démarrage.

Pré-requis

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

Installation de Scala

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

Maven

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

Lift

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

sbt

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

Configuration 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

Eclipse

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

Scala IDE for Eclipse

Depuis Eclipse :

sbt-eclipse-plugin

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/

Premier projet Eclipse

Depuis Eclipse :

  • File → New → Project… → Scala Wizards → Scala Project → Next → Project Name: Hello Lift → Unckeck Use Default Location → Location: ~/tmp/hello-lift → Finish
  • Clic droit sur le projet Hello Lift → Properties → Java Build Path → Libraries → Add Library… → SBT Dependency library → Finish → Order and Export → Check: Scala Library Version 2.7.5-final → Check: JRE System Library → Check: SBT Dependency Library
  • Up: SBT Dependency Library before Scala Library Version 2.7.5-final and JRE System Library
  • OK
  • Project → Clean → OK
  • Supprimer le fichier LiftConsole.scala du package test.scala

emacs + scala-mode

cd 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)
	     ))

Mercurial

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=

Versionner le projet

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"

Travailler efficacement

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

Gabriel KastenbaumGabriel Kastenbaum, 2010/07/03 05:34

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

Enter your comment
MCKUD
 
 
blog/scala_list_sbt_eclipse_et_mercurial.txt · Last modified: 2010/03/07 23:18 by betehess
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki