Mon précédent article parlait de teinter la programmation Java d’un petit style fonctionnel avec la librairie Guava. Pourquoi ne pas nous tourner vers Scala qui intègre les paradigmes de la programmation fonctionnelle et qui compile en bytecode pour la JVM. C’est ce que nous allons voir aujourd’hui dans le contexte de Confluence et valider l’interopérabilité entre Java et Scala. En plus de ça, Scala est un langage intéressant à de multiples niveaux : sa syntaxe concise, typage statique, un pattern matching puissant, la gestion de la concurrence avec les acteurs… Bref que du bon.
Nous allons utiliser le tutoriel d’Atlassian sur leur SDK et écrire une version Scala du plugin généré de base : il contient par défaut une macro et quelques tests comme vous avez pu le voir dans le billet sur le dev de plugin Confluence. Nous allons modifier notre plugin pour intégrer Scala, réécrire le code de cette macro en Scala donc. On n’oubliera pas de s’assurer que tout fonctionne correctement.
Génération du plugin
Avec le SDK d’Atlassian correctement installé et configuré, utilisez la commande atlas-create-confluence-plugin
pour créer un plugin, nommez le groupId, l’artifactId et le packageName comme bon vous semble.
Dans la structure du projet, à code des dossiers src/main et src/test, créer un dossier « scala » à coté de celui nommé « java ». Vous vous en doutez, c’est là que nous mettrons nos fichiers sources Scala.
Vous devriez avoir une structure de ce format :
Modification du pom.xml
Il s’agit ici d’intégrer la dépendance vers la bibliothèque Scala et le plugin maven-scala-plugin à notre descripteur de projet Maven.
Dans les dépendances, ajoutez l’artifact scala-library
:
<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency>
Entre les balises <plugins></plugins>, ajouter le plugin maven-scala-plugin :
<plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> <configuration> <scalaVersion>${scala.version}</scalaVersion> </configuration> </plugin>
Dans les balises <properties></properties> ajouter la propriété scala.version :
<scala.version>2.9.0</scala.version>
Ajoutez aussi les repository maven qui distribuent les artifacts nécessaires :
<repositories> <repository> <id>scala-tools.org</id> <name>Scala-Tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>scala-tools.org</id> <name>Scala-Tools Maven2 Repository</name> <url>http://scala-tools.org/repo-releases</url> </pluginRepository> </pluginRepositories>
Traduction
Créer un fichier ExampleMacro.scala dans le dossier src/main/scala. Voici la version scala de la macro ExampleMacro.java générée en example par le SDK :
N’oubliez pas d’effacer la version Java ( src/main/java/ExampleMacro )
Test
Dans un terminal avec le répertoire courant dans le dossier du projet, faites mvn confluence:run
.
Rendez vous dans votre navigateur web sur à l’URL suivante http://localhost:1990/confluence
Logger vous en admin/admin, puis sur le dashboard, allez dans l’espace de démonstration et éditer sa home page : y ajouter la macro sample-plugin-with-scala et valider.
Tada!
Conclusion
Nous avons vu aujourd’hui la simplicité déconcertante d’ajouter Scala à notre outillage de développement de plugin pour Confluence. L’interopérabilité Java/Scala semble bonne (la compilation génère le même bytecode, à l’exception de l’utilisation de certaines fonctionnalités propres à Scala). Vous n’avez plus d’excuse pour monter en compétence sur Scala (et devenir un polyglot programmer!) en développant des plugins Confluence.
Les sources sont disponibles sur BitBucket.
Very nice. Haven’t ventured into Scala yet, but this will definitely help me
Roberto