Contrôler la qualité de ses projets avec Sonar


précédentsommairesuivant

III. Analyse d'un projet

III-A. Prérequis

Sonar est capable d'analyser des projets de différents langages.

Dans la suite de cet article, nous nous concentrerons plus particulièrement sur l'analyse de projets Java. Pour connaître la procédure nécessaire à l'analyse d'un projet autre que Java, il suffit de se référer à la documentation du plugin gérant ce langage. À noter que les résultats et fonctionnalités proposées par Sonar sont généralement indépendants du langage, et donc ce qui sera par la suite expliqué sur l'analyse des projets Java est généralement vrai pour les analyses des autres projets.

Concernant l'analyse d'un projet Java en elle-même, elle peut être réalisée de trois façons :

III-B. Utilisation du plugin Java

Si votre projet utilise déjà Maven 2 ou 3, le plus simple est de faire appel au plugin Maven de Sonar. La première chose à faire est de définir quelques paramètres Maven à placer de préférence dans son fichier settings.xml. Nous redéfinissons là les paramètres de connexion à la base de données, ainsi que l'URL du serveur Sonar.

 
Sélectionnez

...
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
             <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8</sonar.jdbc.url>
             <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver>
             <sonar.jdbc.username>sonar</sonar.jdbc.username>
             <sonar.jdbc.password>sonar</sonar.jdbc.password>
             <!-- La ligne ci-dessous n'est utile que si le port par défaut (9000) est modifié dans le fichier de configuration. -->
             <sonar.host.url>http://url-serveur:1234</sonar.host.url>
        </properties>
    </profile>
...

Il suffit ensuite de lancer la commande suivante :

mvn sonar:sonar

Il est recommandé de réaliser une installation des artefacts Maven de son projet avant (surtout dans le cas d'un projet multimodules). Nous procéderons ainsi (on notera que les tests sont ignorés lors de la première commande, car ils seront exécutés par le plugin Sonar) :

mvn clean install -Dtest=false -DfailIfNoTests=false
mvn sonar:sonar

Si la commande précédente ne peut être utilisée, ou que l'on souhaite réaliser l'analyse en une seule commande Maven, on privilégiera la commande suivante, ce qui aura toutefois l'inconvénient d'exécuter les tests deux fois :

mvn clean install sonar:sonar -Dmaven.test.failure.ignore=true

Une fois cette commande exécutée, il sera possible de consulter l'analyse en se rendant sur le serveur de Sonar.

III-C. Utilisation d'une tâche Ant

Pour lancer une analyse Sonar en utilisant Ant, il est nécessaire de disposer des versions au moins égales à 1.7.1 d'Ant, 1.5 de Java et 2.8 de Sonar.

Il faut ensuite télécharger la tâche Ant ici, puis déclarer cette tâche dans son script Ant :

 
Sélectionnez

...
    <!-- Ajout de la tâche Sonar pour Ant. -->
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <!-- Cette librairie peut aussi être ajoutée dans le répertoire ${ANT_HOME\}/lib -->
        <!-- Dans ce cas, le node classpath ci-dessous est inutile. -->
        <classpath path="path/to/sonar/ant/task/lib" /> 
    </taskdef>
    
    <!-- Propriétés propres à Sonar, par exemple pour MySQL : -->
    <property name="sonar.jdbc.url" 
        value="jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8" />
    <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="sonar.jdbc.username" value="sonar" />
    <property name="sonar.jdbc.password" value="sonar" />
    <!-- Et dans le cas  le serveur se trouve sur une autre machine -->
    <property name="sonar.host.url" value="http://url-serveur:1234" />
...

On définira ensuite une target Ant dans son script :

 
Sélectionnez

<project name="Mon projet">
    <!-- Définition de la tâche Sonar pour Ant. -->
    <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
        <classpath path="path/to/sonar/ant/task/lib" />
    </taskdef>

    <!-- Ajout de la cible Ant -->
    <target name="sonar">
        <!-- On définit les propriétés obligatoires pour Sonar -->
        <property name="sonar.sources" value="list of source directories separated by a comma" />

        <!-- On définit les propriétés optionnelles pour Sonar -->
        <property name="sonar.projectName" value="this value overrides the name defined in Ant root node" />
        <property name="sonar.binaries" value="list of directories which contain for example the Java bytecode" />
        <property name="sonar.tests" value="list of test source directories separated by a comma" />
        <property name="sonar.libraries" value="list of paths to libraries separated by a comma (These libraries are for example used by the Sonar Findbugs plugin)" />
        ...

        <sonar:sonar key="org.example:example" version="0.1-SNAPSHOT" xmlns:sonar="antlib:org.sonar.ant"/>
    </target>
</project>

Une fois ceci fait, il suffit de lancer la commande suivante pour lancer l'analyse :

ant sonar

Il est possible d'analyser de cette façon des projets multimodules. Pour ce faire, on se rendra sur la page wiki dédiée de Sonar.

III-D. Utilisation de l'exécuteur Java

La dernière possibilité pour analyser un projet Java est de passer par un exécuteur Java. Cela nécessite Java 1.5 et Sonar 2.6. Il faut ensuite télécharger l'exécuteur Java, disponible ici.

Pour analyser un projet, il faut créer un fichier appelé sonar-project.properties, dont le contenu sera le suivant :

 
Sélectionnez

# Métadonnées du projet.
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0

# Chemin vers les sources (obligatoire).
sources=srcDir1,srcDir2

# Chemin vers les sources de test (optionnel).
tests=testDir1,testDir2

# Chemin vers les binaires du projet (optionnel).
binaries=binDir

# Chemin vers les librairies du projet (optionnel).
libraries=junit.jar

# Décommenter ces lignes si le projet utilise des spécificités de Java 1.5 ou 1.6
#sonar.java.source=1.5
#sonar.java.target=1.5

# Décommenter cette ligne dans le cas où le projet n'est pas un projet Java.
# Dans ce cas, il faut indiquer de quelle nature est le projet (ici Cobol).
#sonar.language=cobol

# Paramètres avancés, spécifiques au projet.
my.property=value

Une fois tout ceci configuré, il suffira de lancer la commande suivante pour analyser le projet :

sonar-runner

III-E. Automatisation

Nous venons de voir comment lancer l'analyse Sonar manuellement. Mais il est bien plus profitable de faire réaliser cette tâche automatiquement, grâce à un outil d'intégration continue. Parmi les serveurs d'intégration continue les plus connus, on citera :

Sonar propose des plugins pour Jenkins / Hudson, Bamboo ou AnthillPro, offrant ainsi une meilleure interaction des outils.

Nous voyons ici la configuration de notre serveur Sonar depuis l'interface Jenkins / Hudson :

Image non disponible
Configuration du plugin Sonar sur un serveur Jenkins / Hudson

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.