lundi 16 mai 2011

Environnement de développement Scala: sbt + Eclipse

Dans le cadre de tests de persistance avec Scala, je me suis rapidement rendu compte que travailler avec sbt (incontournable) et Notepad++ était assez inconfortable.
C'est d'autant plus vrai qu'Eclipse dispose d'un plugin qui fonctionne bien et qu'il existe pour sbt un plugin permettant de rendre un projet sbt compatible avec Eclipse: Eclipsify.
Dans un document où je tiens la liste des les ressources Scala que je trouve, j’ai indiqué le site d’Eclipsify (http://github.com/musk/SbtEclipsify) et j’ai ajouté comme commentaire "ça marche, bien lire!". Malgré tout, j’ai dû m’y reprendre à plusieurs reprises. Comme quoi "bien lire" est plus compliqué qu’il n’y paraît...
Voici la procédure que j’ai suivie. Bien lire...

Le plugin scala pour Eclipse

Pour ma part, j’utilise Eclipse 3.6 (Helios). Quant au plugin Scala, j'utilise la version 2.0.0, qui est certes en bêta, mais qui fonctionne correctement. Le site d'update se trouve à http://download.scala-ide.org/releases/2.0.0-beta/
L'installation du plugin se fait comme pour tous les plugins dans Eclipse.

Simple Build Tool - sbt

Le site de sbt se trouve à http://code.google.com/p/simple-build-tool/. Pour le faire fonctionner, il suffit de dowloader la dernière version du jar et de créer un script de lancement (indiqué sur le site).
Voici la version windows, sbt.bat
set SCRIPT_DIR=%~dp0
java -Dhttp.proxyHost=proxy -Dhttp.proxyPort=80 -Xmx512M -jar "%SCRIPT_DIR%sbt-launch-0.7.7.jar" %*
Il est bien entendu que la version de sbt-launch.jar correspond à la version utilisée.
Pour terminer, il faut ajouter le répertoire qui contient le ".bat" dans la variable d'environnement path.

Eclipsify

Voilà deux bons outils, mais qui ne sont pas liés. Par défaut, sbt utilise une structure de répertoires du genre Maven, là où Eclipse s'en tient à un simple répertoire src. Les deux peuvent être liés avec le plugin Eclipsify. Le terme "plugin" peut être ambigu ici: il s’agit d’un plugin sbt et non d'Eclipse.
Son utilisation doit être configurée dans un projet sbt.
Par convention, "HOME" est le répertoire de base du projet.

Config du plugin

Dans HOME/project/plugins (plugins doit sans doute être créé), créer un ficher NomDuProjectPlugins.scala. C’est là qu’on va configurer l’utilisation du plugin:

import sbt._
class NomDuProjetPlugins(info: ProjectInfo) extends PluginDefinition(info) {
    lazy val eclipse = "de.element34" % "sbt-eclipsify" % "0.7.0"
}

Config du projet

Dans HOME/project/build, créer le fichier de Build du nom NomDuProjectBuild.scala:

import sbt._
import de.element34.sbteclipsify._
class NomDuProjectBuild(info:ProjectInfo) extends DefaultProject(info) with Eclipsify{
    //dépendances du projet, configuration du projet...
}

A noter le "with Eclipsify" puisque c'est celui que j’oublie à chaque fois... :-)

Recharger la configuration

Dans la console sbt, taper reload. sbt recharge la configuration du projet. Si tout s’est bien passé, vous avez désormais une action “eclipse” disponible.
Il suffit de taper "eclipse" dans la console sbt pour “éclipsifier” le projet. Si vous n’en êtes pas là, "actions" vous montrera la liste des actions disponibles: "eclipse" devrait être dedans....

Importer le projet dans Eclipse

Dans Eclipse, import existing project... Choisir le HOME. Le projet est importé avec la nature scala.

Au boulot maintenant ! Ou presque.

En fait, il faut développer dans eclipse et utiliser sbt pour lancer les tests, packager...

Integration plugin

Il existe un plugin Eclipse permettant l'intégration de sbt avec Eclipse. Pour le moment, il sent encore le neuf et la documentation est un peu faible.
Voici l'adresse: http://www.assembla.com/spaces/sbt-eclipse-integration/wiki. Un site d'update existe momentanément car le responsable de ce projet souhaite le lier à Eclipsify. http://sbtei.element34.de/updatesite/
Le plugin s'installe sans problème et permet d'ajouter une nature "sbt" au projet. Cela se fait depuis la package view, un clic droit sur le projet. Une entrée sbt s'affiche dans le menu contextuel.
Dans le préférence, il faut aussi configurer le sbt-launcher.jar utilisé.
Ce qu'il fait d'autre? Pour le moment, je l'ignore...

Aucun commentaire:

Enregistrer un commentaire