IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Qualimétrie Discussion :

[Maven] Inclure mes règles


Sujet :

Qualimétrie

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut [Maven] Inclure mes règles
    bonjour,

    j'ai codé mes propres régles PMD.
    J'ai généré un ruleset.xml avec mes règles.
    j'ai créer un projet avec maven2 pour pouvoir y tester mes règles.
    voici le pom.xml :
    Code xml : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>xxxx.application.test</groupId>
      <artifactId>app-test</artifactId>
      <packaging>jar</packaging>
      <version>1.0</version>
      <name>Maven Quick Start Archetype</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>pmd</groupId>
          <artifactId>pmd</artifactId>
          <version>3.7</version>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>crc.rules</groupId>
          <artifactId>CodingCustomerRulesPrj</artifactId>
          <version>0.0.1</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
      <reporting>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
    	  <artifactId>maven-pmd-plugin</artifactId>
    	  <configuration>
    	    <rulesets>
    	<ruleset>src/main/resources/rulesets/codingCustomerRules.xml</ruleset>
              </rulesets>
    	  </configuration>
    	</plugin>
        </plugins>
      </reporting>
    </project>

    le projet contenant les nouvelles règles a le pom.xml suivant :
    Code xml : 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
     
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>crc.rules</groupId>
      <artifactId>CodingCustomerRulesPrj</artifactId>
      <packaging>jar</packaging>
      <version>0.0.1</version>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>pmd</groupId>
          <artifactId>pmd</artifactId>
          <version>3.7</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
    </project>

    Celui-ci est installé dans mon repository local.

    Quand je lance la commande:
    mvn pmd:pmd
    sous le projet de test à savoir 'app-test' j'ai le résultat suivant :

    [INFO] Scanning for projects...
    [INFO] Searching repository for plugin with prefix: 'pmd'.
    [INFO] ----------------------------------------------------------------------------
    [INFO] Building Maven Quick Start Archetype
    [INFO] task-segment: [pmd:pmd]
    [INFO] ----------------------------------------------------------------------------
    [INFO] [pmd:pmd]
    [WARNING] Unable to locate Source XRef to link to - DISABLED
    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] An error has occurred in Rapport PMD report generation.

    Embedded error: Couldn't find that class crc.rules.customer.CRCClassNamingConventions
    [INFO] ------------------------------------------------------------------------
    [INFO] For more information, run Maven with the -e switch
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 3 seconds
    [INFO] Finished at: Sun Nov 19 23:10:35 CET 2006
    [INFO] Final Memory: 3M/7M
    [INFO] ------------------------------------------------------------------------
    il n'arrive pas à trouver la classe crc.rules.customer.CRCClassNamingConventions pourtant elle a bien était compilée et elle se trouve bien dans le jar sur le repository local.

    help me, please !

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par sollda
    il n'arrive pas à trouver la classe crc.rules.customer.CRCClassNamingConventions pourtant elle a bien était compilée et elle se trouve bien dans le jar sur le repository local.
    Les dependencies sont les dépendances de ton projet. Pour les rapports et les plugins (comme pmd), Maven utilise son propre classpath, sans les ajouts de ton projets.

    Donc, pour que ton test fonctionne:
    • Vire toutes les dépendances dans dependencies qui ne sont pas des dépendances de ton projet, mais des dépendances de l'outil (exemple pmd dans app-test)
    • Ajoute dans app-test tes classes au classpath Maven en utilisant les extensions : http://maven.apache.org/pom.html#Extensions


    Et voila, tout marchera

    Bonne chance!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    merci, pour ton aide.
    j'ai fait ce que tu m'as dit et je n'ai plus de ClassFoundException, mais maintenant j'ai un autre type d'erreur une ClassCastException.

    + Error stacktraces are turned on.
    [INFO] Scanning for projects...
    [INFO] Searching repository for plugin with prefix: 'pmd'.
    [INFO] ----------------------------------------------------------------------------
    [INFO] Building Unnamed - agnet.application.test:app-test:jar:1.0
    [INFO] task-segment: [pmd:check]
    [INFO] ----------------------------------------------------------------------------
    [INFO] Preparing pmd:check
    [INFO] [pmd:pmd]
    [WARNING] Unable to locate Source XRef to link to - DISABLED
    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] An error has occurred in Rapport PMD report generation.

    Embedded error: crc.rules.customer.CRCParameterNamingConventions
    [INFO] ------------------------------------------------------------------------
    [INFO] Trace
    org.apache.maven.lifecycle.LifecycleExecutionException: An error has occurred in Rapport PMD report generation.
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:559)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkProjectLifecycle(DefaultLifecycleExecutor.java:898)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.forkLifecycle(DefaultLifecycleExecutor.java:734)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:505)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:488)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:458)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    Caused by: org.apache.maven.plugin.MojoExecutionException: An error has occurred in Rapport PMD report generation.
    at org.apache.maven.reporting.AbstractMavenReport.execute(AbstractMavenReport.java:79)
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
    ... 19 more
    Caused by: java.lang.ClassCastException: crc.rules.customer.CRCParameterNamingConventions
    at net.sourceforge.pmd.RuleSetFactory.parseInternallyDefinedRuleNode(RuleSetFactory.java:309)
    at net.sourceforge.pmd.RuleSetFactory.parseRuleNode(RuleSetFactory.java:292)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSet(RuleSetFactory.java:230)
    at net.sourceforge.pmd.RuleSetFactory.createRuleSet(RuleSetFactory.java:202)
    at org.apache.maven.plugin.pmd.PmdReport.executeReport(PmdReport.java:176)
    at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:98)
    at org.apache.maven.reporting.AbstractMavenReport.execute(AbstractMavenReport.java:73)
    ... 21 more
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 3 seconds
    [INFO] Finished at: Mon Nov 20 23:18:19 CET 2006
    [INFO] Final Memory: 3M/6M
    [INFO] ------------------------------------------------------------------------

    J'ai développé mes règles sur eclipse à partir du plugin pmd eclipse.
    Elles étendent toutes 'bstractRule', voici le code :

    package crc.rules.customer;

    import java.util.List;

    import net.sourceforge.pmd.AbstractRule;
    import net.sourceforge.pmd.ast.ASTName;
    import net.sourceforge.pmd.ast.ASTPackageDeclaration;

    /**
    *
    * TODO To change the template for this generated type comment go to
    * Window - Preferences - Java - Code Style - Code Templates
    */
    public class CRCCustomerRule extends AbstractRule {
    public static final char SEPARATOR = '.';

    private String root = new String("");
    private int packageLevel = 1;

    public Object visit(ASTPackageDeclaration node, Object data) {
    List children = node.findChildrenOfType(ASTName.class);
    if (!children.isEmpty()) {
    ASTName nodeName = (ASTName) children.get(0);
    if (nodeName.getImage().indexOf(".") < 0) {
    this.setRoot(nodeName.getImage().toUpperCase());
    } else {
    this.setRoot(nodeName.getImage().substring(0, nodeName.getImage().indexOf(".")).toUpperCase());
    }

    /* détermine le trigramme/quadrigramme */
    if (getRoot().length() > 4 || getRoot().length() < 3) {
    addViolationWithMessage(data, node, "La racine (unique à un projet) doit être un trigramme ou quadrigramme.");
    }

    /* détermine le nombre de niveau du package */
    setPackageLevel(1);
    for (int n=0; n<nodeName.getImage().length(); n++) {
    if (SEPARATOR == nodeName.getImage().charAt(n)) {
    packageLevel++;
    }
    }
    }
    return super.visit(node, data);
    }

    /**
    * @return Returns the root.
    */
    public String getRoot() {
    return root;
    }
    /**
    * @param root The root to set.
    */
    public void setRoot(String root) {
    this.root = root;
    }
    /**
    * Retourne le niveau d'imbrication du package
    */
    public int getPackageLevel() {
    return packageLevel;
    }

    public void setPackageLevel(int packageLevel) {
    this.packageLevel = packageLevel;
    }
    }

    mes pom.xml (après tes conseils) sont les suivants :

    pom.xml du projet contenant les règles :

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>CodingCustomerRulesPrj</groupId>
    <artifactId>CodingCustomerRulesPrj</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1</version>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>pmd</groupId>
    <artifactId>pmd</artifactId>
    <version>3.7</version>
    <scope>compile</scope>
    </dependency>
    </dependencies>
    </project>

    pom.xml du projet pour lequel on veut passer les règles :

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>xxxx.application.test</groupId>
    <artifactId>app-test</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>3.8.1</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    <reporting>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <configuration>
    <rulesets>
    <ruleset>src/main/resources/rulesets/codingCustomerRulesTest.xml</ruleset>
    </rulesets>
    </configuration>
    </plugin>
    </plugins>
    </reporting>
    <build>
    <extensions>
    <extension>
    <groupId>CodingCustomerRulesPrj</groupId>
    <artifactId>CodingCustomerRulesPrj</artifactId>
    <version>0.0.1</version>
    </extension>
    </extensions>
    </build>
    </project>

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut comment executer la version pmd-3.8 et non pmd-3.7
    après quelques recherches sur le net, j'en suis venu à la conclusion qu'il s'agit d'un bug propre à PMD.

    J'ai donc voulu travaillé avec la version 3.8 de pmd mais rien à faire, maven2 continue à travailler avec la 3.7. J'ai supprimer la 3.7 du repository local et j'ai installé la 3.8 manuellement, mais rien n'a faire.

    J'utilise la version 2.0.4 de maven.

    la dependence déclaré dans le pom :
    <dependency>
    <groupId>pmd</groupId>
    <artifactId>pmd</artifactId>
    <version>3.7</version>
    <scope>compile</scope>
    </dependency>
    est présente dans le repository local.


    mais pour la déclaration du plugin :
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>3.7</version>
    <configuration>
    <linkXRef>false</linkXRef>
    <format>xml</format>
    <sourceEncoding>utf-8</sourceEncoding>
    <minimumTokens>100</minimumTokens>
    <rulesets>
    <ruleset>src/main/resources/rulesets/codingCustomerRulesTest.xml</ruleset>
    </rulesets>
    </configuration>
    </plugin>

    où se trouve la resource et quel lien y a t il avec la dependance pmd-3.7 et avec le jar maven-reporting-api-2.0.4.jar présent dans le répertoire lib de maven2 ?

    merci

Discussions similaires

  1. [Cobertura] [Maven] inclure les tests d'intégration dans les rapports de qualité
    Par Tcharl dans le forum Qualimétrie
    Réponses: 1
    Dernier message: 02/05/2011, 21h33
  2. Réponses: 0
    Dernier message: 07/06/2010, 15h47
  3. Validation de mes règles Iptables
    Par kippix dans le forum Sécurité
    Réponses: 2
    Dernier message: 08/11/2006, 10h06
  4. Ce que vous pensez de mes règles iptables
    Par HNT dans le forum Sécurité
    Réponses: 17
    Dernier message: 01/09/2006, 10h25
  5. [Maven 2]mes jar en dependencies
    Par DanielW33 dans le forum Maven
    Réponses: 2
    Dernier message: 28/07/2006, 09h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo