Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intégration Continue Discussion :

sonar - PMD customs rules


Sujet :

Intégration Continue

  1. #1
    Membre du Club
    sonar - PMD customs rules
    Bonjour,

    je tente d'integrer des regles PMD (que j'ai créé) dans sonar.
    Je ne comprend pas se qui bloque.

    voila ce que j'ai:

    un jar avec l'arborescence suivante:

    pmd.jar (placé dans SONAR_HOME/extensions/rules/pmd/)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -pmd.xml
    -org
         |_sonar
                  |_pmd
                          |_WhileLoopsMustUseBracesRule
    fichier pmd.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="utf-8"?>
    <ruleset name="Mes regles PMD" xmlns="http://pmd.sf.net/ruleset/1.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0
    	http://pmd.sf.net/ruleset_xml_schema.xsd"
    	xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
    
    	<description>Mes regles PMD</description>
    
    	<rule name="WhileLoopsMustUseBracesRule" 
    		message="Ne pas utiliser de while sans accolades (version Java)"
    		class="org.sonar.pmd.WhileLoopsMustUseBracesRule">
    		<description>Controle la prosence d'accolades apres les while (version Java)</description>
    		<priority>3</priority>
    		<example>
    		<![CDATA[
    			   public void doSomething() {
    				 while (true)
    					 x++;
    			   }
    		  ]]>
    		</example>
    	</rule>           	
    </ruleset>

    le fichier WhileLoopsMustUseBracesRule.java (exemple du site pmd.sourceforge):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package org.sonar.pmd;
    
    import net.sourceforge.pmd.AbstractRule;
    import net.sourceforge.pmd.ast.ASTBlock;
    import net.sourceforge.pmd.ast.ASTWhileStatement;
    import net.sourceforge.pmd.ast.SimpleNode;
    
    
    
    public class WhileLoopsMustUseBracesRule extends AbstractRule {
    	
    	 public Object visit(ASTWhileStatement node, Object data) {
    	        SimpleNode firstStmt = (SimpleNode)node.jjtGetChild(1);
    	        if (!hasBlockAsFirstChild(firstStmt)) {
    	            addViolation(data, node);
    	        }
    	        return super.visit(node,data);
    	    }
    	    private boolean hasBlockAsFirstChild(SimpleNode node) {
    	        return (node.jjtGetNumChildren() != 0 && (node.jjtGetChild(0) instanceof ASTBlock));
    	    }
    }

    fichier index.xml (placé a coté du jar)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0"?>
    <rules>
    	<rule key="WhileLoopsMustUseBracesRule">
    		<name>While statements need braces</name>
    		<configKey>pmd.xml/WhileLoopsMustUseBracesRule</configKey>
    		<category name="Usability" />
    		<description>contrôle la présence d'accolades après les while (version Java)</description>
    	</rule>	
    </rules>

    le probleme est que sonar ne se demarre pas.
    Par contre si j'enleve le fichier index.xml, ca demarre, mais biensur ca ne marche pas

    je vous donne egalement le log de sonar (quand il ne se demarre pas)

    j'espere que quelqu'un pourra m'aider

    merci

  2. #2
    Membre du Club
    arg....... personne ne peut m'aider?

  3. #3
    Membre du Club
    j'ai resolu mon probleme tout seul

    Pour une raison inconnu je suis obligé de mettre un paramettre pour chaque regle dans mon fichier index.xml

    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <param key="maxviolations" type="i">
    			<description>The maximum number of violations per class.</description>
    		</param>

    voila