Flex Builder 3 Débutant ? Découvrez Flex et Adobe® Flex® Builder 3
04
sept
09

FlexPMD – Tutorial Invoquer FlexPMD en ligne de commande

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):

dl-pmd

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.

pmd-creator

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:
pmd-lis
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]):

cmd-1

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é.

cmd-2

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:

1 Réponse à “FlexPMD – Tutorial Invoquer FlexPMD en ligne de commande”


  1. 1 bnj sept 24th, 2009 at 15:56

    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 :)

Laisser un commentaire

Si vous souhaitez poster du code ActionScript, mettez le entre des balises comme ceci [as]code[/as]. Pour du code MXML, mettez le dans des balises [mxml]code[/mxml]. Merci




Bientôt sur flex-tutorial.fr …

  • - Tutoriaux BlazeDS
  • - Composants Flex

tutorial flex tutorial flex

flex Adobe Air AFCS Data Filter Lib ToasterLib librairies AS3 Flex livres AS3 Flex

 

septembre 2009
L Ma Me J V S D
« août   oct »
 123456
78910111213
14151617181920
21222324252627
282930