FlexPMD est un outil permettant d'analyser votre code ActionScript/MXML. A partir d'un ensemble de règles, il peut générer un fichier de rapport (pmd.xml). Dans ce tutorial FlexPMD, je vais montrer comment utiliser FlexPMD en ligne de commande.
Présentation de l'outil Adobe FlexPMD
Télécharger la dernière version de FlexPMD
Pour cela, rendez-vous sur la page de download du projet FlexPMD sur opensource.adobe:
Télécharger FlexPMD en ligne de commande.
Prenez celle ayant la date de build la plus récente (les numéros de versions peuvent varier par rapport au screenshot):

Télécharger le fichier de règles (Rules)
Avant de lancer FlexPMD, vous devez disposer d'un fichier de règles que l'on va donner all_flex.xml. Ce fichier peut être crée par le FlexPMD Ruleset Creator. Lancez l'outil, modifiez les règles composant votre RuleSet si vous le voulez puis cliquez sur "Export". Ne nommez pas votre fichier pmd.xml mais plutôt all_flex.xml, ce sera plus clair pour la suite.

Dans sa version actuelle, le FlexPMD Ruleset Creator à un petit "bug". En effet, l'application ne se resize pas par rapport à la taille de votre fenêtre. Si vous avez un wide screen ou beaucoup de toolbars, vous ne pourrez donc pas voir le bouton export. Dans ce cas, vous pouvez télécharger ce fichier exporté depuis FlexPMD RuleSetCreator:
Télécharger le fichier all_flex.xml contenant les règles pour FlexPMD
Lancer FlexPMD en ligne de commande
Dézippez l'archive et vous devriez avoir ces fichiers:

Pour cet exemple, le chemin vers le dossier de FlexPMD est C:\Users\fab\Desktop\flex-pmd-command-line-1.0.RC3, que l'on va appeler [PMD_DIR].
Le chemin des sources de mon projet Flex est C:\Users\fab\Desktop\src, que l'on va appeler [SRC_DIR].
Pour la suite, vous devez avoir Java ajouté à votre Path si ce n'est pas déjà fait (tuto Windows / Unix)
Si vous êtes sous Windows, ouvrez un Invite de Commande (Démarrer>Executer>cmd). Sous linux/mac, ouvrez votre terminal.
Placez vous dans le répertoire ou se trouve les jar de FlexPMD ([PMD_DIR]):

Vous pouvez maintenant invoquer FlexPMD en ligne de commande. Voici la ligne à entrer:
java -Xmx256m -jar flex-pmd-command-line-1.0.RC3.jar -s [SRC_DIR] -o . -r all_flex.xml
Voici le détail des différentes options de compilation:
- -s: Chemin vers les sources ActionScript à analyser
- -o: Chemin dans lequel le fichier sera écrit. La valeur "." indique que le fichier sera crée dans le même répertoire que le jar.
- -Xmx256m permet de modifier un paramètre de Java. Si vous ne le précisez pas, vous aurez l'erreur "Exception in thread "main" java.lang.OutOfMemoryError: Java heap space"
- -r (facultatif): Chemin vers le fichier de règles (RuleSet). Si vous né spécifiez pas de fichier de règles (all_flex.xml), un ensemble de règles par défaut sera utilisé.

Un fichier nommé "pmd.xml" sera crée. C'est lui qui contient le rapport FlexPMD.
Visualiser le fichier pmd.xml
Le fichier pmd.xml est un rapport de données brut. Pour le visualiser, vous pouvez utiliser l'application FlexPMD Violation Viewer. Il vous suffit d'uploader votre fichier pmd.xml et l'application va afficher le détail des violations ainsi que les numéros de ligne concernées.
Accéder au FlexPMD Violation Viewer
Les erreurs que vous pouvez obtenir avec FlexPMD
Un des paramètres est incorrect.
Vérifiez votre ligne de commande. Les chemins ne doivent pas contenir d'espaces. S'ils en contiennent, remplacez-les par "%20".
4 sept. 2009 20:12:29 com.adobe.ac.pmd.commandline.FlexPMD areCommandLineOptions
Correct
GRAVE: Usage: java com.adobe.ac.pmd.commandline.FlexPMD (-s|–sourceDirectory) <
sourceDirectory> (-o|–outputDirectory) <outputDirectory> [(-r|--ruleSet) <ruleS
et>] [(-e|--excludePackage) <excludePackage>]
Le chemin vers le fichier RuleSet n'est pas correct:
4 sept. 2009 20:13:25 com.adobe.ac.pmd.engines.AbstractFlexPmdEngine <init>
ATTENTION: all_flex.xml (Le fichier spécifié est introuvable) at java.io.FileInp
utStream.open(Native Method)
java.io.FileInputStream.<init>(Unknown Source)
com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.loadRuleset(AbstractFlexPmdEngine
.java:180)
4 sept. 2009 20:13:25 com.adobe.ac.pmd.FlexPmdViolations computeViolations
INFO: computing RulesList
Exception in thread "main" java.lang.NullPointerException
at com.adobe.ac.pmd.FlexPmdViolations.computeRulesList(FlexPmdViolations
.java:134)
at com.adobe.ac.pmd.FlexPmdViolations.computeViolations(FlexPmdViolation
s.java:82)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.computeViolations(Abst
ractFlexPmdEngine.java:153)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.executeReport(Abstract
FlexPmdEngine.java:136)
at com.adobe.ac.pmd.commandline.FlexPMD.startFlexPMD(FlexPMD.java:115)
at com.adobe.ac.pmd.commandline.FlexPMD.main(FlexPMD.java:69)
Vous n'avez pas indiqué le paramètre -Xmx256m
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.lang.Throwable.toString(Throwable.java:344)
at java.lang.Throwable.<init>(Throwable.java:242)
at java.lang.Exception.<init>(Unknown Source)
at java.util.concurrent.ExecutionException.<init>(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at com.adobe.ac.pmd.files.FileSetUtils.buildThreadedAst(FileSetUtils.java:159)
at com.adobe.ac.pmd.files.FileSetUtils.computeAsts(FileSetUtils.java:108)
at com.adobe.ac.pmd.FlexPmdViolations.computeViolations(FlexPmdViolations.java:89)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.computeViolations(AbstractFlexPmdEngine.java:153)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.executeReport(AbstractFlexPmdEngine.java:136)
at com.adobe.ac.pmd.commandline.FlexPMD.startFlexPMD(FlexPMD.java:115)
at com.adobe.ac.pmd.commandline.FlexPMD.main(FlexPMD.java:69)
Le dossier ne contient aucune source ou est incorrect (espaces par ex.)
Exception in thread "main" net.sourceforge.pmd.PMDException: sourceDirectory doe
s not contain any Flex sources (Specify the source directory in relative (not ab
solute))
at com.adobe.ac.pmd.files.impl.FileUtils.getFlexFiles(FileUtils.java:107
)
at com.adobe.ac.pmd.files.impl.FileUtils.computeFilesList(FileUtils.java
:52)
at com.adobe.ac.pmd.FlexPmdViolations.computeViolations(FlexPmdViolation
s.java:85)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.computeViolations(Abst
ractFlexPmdEngine.java:153)
at com.adobe.ac.pmd.engines.AbstractFlexPmdEngine.executeReport(Abstract
FlexPmdEngine.java:136)
at com.adobe.ac.pmd.commandline.FlexPMD.startFlexPMD(FlexPMD.java:115)
at com.adobe.ac.pmd.commandline.FlexPMD.main(FlexPMD.java:69)
Autres Tutoriaux Flex liés:
- FlexPMD – Tutorial Invoquer FlexPMD avec Ant
- FlexPMD – Un outil pour faire l'audit de vos projets Flex / AS3 / Air
- FlexPMD – Le plug-in Eclipse / Flex Builder 3 / Flash Builder 4 disponible
- Création d'Applications Flex – Conserver les paramètres de compilation dans des fichiers de configuration
- Flex Theme: Créer un thème Flex (SWC)









Merci, pour ceux tuto qui m'a permis de tester le "fameux" FlexPMD tres rapidement!
J'attend le tuto pour l'integration de flexPMD sous Maven