Pour analyser un projet Play framework avec Sonar, je vous propose d'utiliser Apache Ant et Cobertura.
Installation du plugin Cobertura
Le plugin Cobertura va nous permettre d'analyser la couverture de code des tests de notre projet.
Il suffit, pour utiliser Cobertura avec Play!, d'installer le plugin correspondant ; l'analyse s'exécutera automatiquement après le lancement des tests (que ce soit avec play test, play auto-test, ou encore en lançant les classes JUnit). On peut également lancer l'analyse à la main et explorer les résultats via http://localhost:9000/@cobertura lorsque le projet est lancé en mode test (play test).
Pour installer le plugin Cobertura, exécutez la commande :
puis ajoutez la dépendance à votre projet Play! en ajoutant la ligne suivante dans le fichier conf/dependencies.yml de votre projet :
Installation de Sonar
Sonar peut être lancé "out of the box" sur votre machine, il suffit de le télécharger, de le décompresser et d'exécuter le script correspondant à votre OS : http://www.sonarsource.org/downloads/
Pour une installation plus complète : http://docs.codehaus.org/display/SONAR/Install+Sonar#InstallSonar-Installationin4steps
Conflit de port entre Sonar et Play
Vous le remarquerez rapidement, Sonar et Play! écoutent par défaut sur le port 9000. Il est donc bien utile de changer la configuration de l'un ou de l'autre.
Pour changer le port utilisé par votre application Play!, modifiez le fichier conf/application.conf et ajoutez la ligne suivante (avec le port que vous souhaitez) :
Pour changer le port utilisé par Sonar, modifiez le fichier conf/sonar.properties qui se trouve dans le répertoire d'installation de Sonar, et ajoutez la ligne suivante (avec le port que vous souhaitez) :
Antification du projet Play
Pour utiliser Ant pour lancer votre application, exécutez la commande suivante à la racine de votre projet :
Cela génère un fichier build.xml que l'on complètera ensuite. Vous pouvez alors lancer les commandes habituelles via Ant : ant run, ant test. Pour connaître toutes les cibles Ant, exécutez la commande suivante :
Pour que les cibles fonctionnent, vous devez avoir défini la variable d'environnement PLAY_PATH (je l'ai fait dans mon fichier ~/.bashrc).
Installation de la tâche sonar-ant
Documentation : http://docs.codehaus.org/display/SONAR/Analyse+with+Ant+Task
Téléchargez la tâche : http://repository.codehaus.org/org/codehaus/sonar-plugins/sonar-ant-task/1.2/sonar-ant-task-1.2.jar
Ensuite vous avez deux possibilités :
- copier ce jar dans ${ANT_HOME\}/lib ainsi la tâche fonctionnera sans configuration supplémentaire :
- sinon, le mettre où vous le souhaitez, il vous faudra alors ajouter la configuration suivante dans le fichier build.xml :
J'ai choisi la première solution, sous Ubuntu cela se fait ainsi :
Configuration de la cible sonar
Pour pouvoir analyser notre projet Play! dans Sonar, on commence par créer la cible "sonar" dans le fichier build.xml :
Puis on lui ajoute les ligne de configuration suivantes :
pour que Sonar sache où trouver les fichiers source de l'application et des tests
pour que Sonar ne réalise pas l'analyse des tests et de la couverture lui-même, mais pour qu'il réutilise les rapports générés par notre application
pour indiquer où sont les rapports générés lors du lancement des tests
pour indiquer où est le rapport de couverture de code de Cobertura
pour nommer à notre convenance le projet dans Sonar
pour indiquer à Sonar la clé qui identifie notre projet ; la clé se compose de la version et du couple groupId:artifactId de notre projet.
si vous avez changé le port par défaut de Sonar (ou dans le cas où il serait sur une autre machine par exemple)
On obtient alors le fichier build.xml suivant :
Il suffit ensuite de lancer la commande suivante pour analyser le projet (Sonar doit être lancé !):
Aller plus loin avec une tâche "tout-en-un"
L'analyse complète (tests, couverture de code, déploiement dans Sonar) de notre projet Play! se fait donc en lançant les commandes :
Pour automatiser le tout, on pourrait lancer ces trois tâches en une seule cible "qualité" qui pourrait par exemple être utilisée par Hudson/Jenkins dans un soucis d'intégration continue :
Vous remarquerez que j'ai redéfini la cible auto-test alors qu'elle existe déjà dans le fichier Ant de Play! ; en effet, dans mon cas, cette cible ne fonctionne pas (ni la cible precompile).
En lançant :
Vous lancerez donc vos tests, l'analyse de la couverture de code, et l'analyse de la qualité de votre projet dans Sonar.
Vous n'avez alors plus qu'à aller regarder le résultat ici : http://localhost:9008 (ou http://localhost:9000 si vous n'avez pas modifié le port par défaut de Sonar).
By A Web Design


