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/)
fichier pmd.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 -pmd.xml -org |_sonar |_pmd |_WhileLoopsMustUseBracesRule
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
24
25 <?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
Partager