From 5a9dfe3d3c8fa938f70d3837dd1843b9d322bf7a Mon Sep 17 00:00:00 2001 From: vmassol Date: Thu, 3 Apr 2003 18:58:12 +0000 Subject: [PATCH] Moved the PMD plugin from http://sourceforge.net/projects/maven-plugins to the Maven CVS. I will move it to another place when we decide to have plugins hosted in a different subproject of maven.apache.org. git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@113253 13f79535-47bb-0310-9956-ffa450edef68 --- pmd/LICENSE.txt | 57 +++++++++ pmd/plugin.jelly | 67 ++++++++++ pmd/plugin.properties | 14 +++ pmd/pmd.jsl | 124 ++++++++++++++++++ pmd/project.properties | 1 + pmd/project.xml | 109 ++++++++++++++++ pmd/rulesets/basic.xml | 209 +++++++++++++++++++++++++++++++ pmd/rulesets/braces.xml | 92 ++++++++++++++ pmd/rulesets/codesize.xml | 124 ++++++++++++++++++ pmd/rulesets/design.xml | 176 ++++++++++++++++++++++++++ pmd/rulesets/experimental.xml | 90 +++++++++++++ pmd/rulesets/favorites.xml | 23 ++++ pmd/rulesets/imports.xml | 75 +++++++++++ pmd/rulesets/junit.xml | 48 +++++++ pmd/rulesets/naming.xml | 85 +++++++++++++ pmd/rulesets/newrules.xml | 12 ++ pmd/rulesets/rulesets.properties | 1 + pmd/rulesets/strings.xml | 71 +++++++++++ pmd/rulesets/unusedcode.xml | 105 ++++++++++++++++ pmd/xdocs/changes.xml | 52 ++++++++ pmd/xdocs/how-to.xml | 68 ++++++++++ pmd/xdocs/images/sample.gif | Bin 0 -> 26498 bytes pmd/xdocs/index.xml | 107 ++++++++++++++++ pmd/xdocs/navigation.xml | 18 +++ pmd/xdocs/properties.xml | 36 ++++++ pmd/xdocs/tasks.xml | 22 ++++ 26 files changed, 1786 insertions(+) create mode 100644 pmd/LICENSE.txt create mode 100644 pmd/plugin.jelly create mode 100644 pmd/plugin.properties create mode 100644 pmd/pmd.jsl create mode 100644 pmd/project.properties create mode 100644 pmd/project.xml create mode 100644 pmd/rulesets/basic.xml create mode 100644 pmd/rulesets/braces.xml create mode 100644 pmd/rulesets/codesize.xml create mode 100644 pmd/rulesets/design.xml create mode 100644 pmd/rulesets/experimental.xml create mode 100644 pmd/rulesets/favorites.xml create mode 100644 pmd/rulesets/imports.xml create mode 100644 pmd/rulesets/junit.xml create mode 100644 pmd/rulesets/naming.xml create mode 100644 pmd/rulesets/newrules.xml create mode 100644 pmd/rulesets/rulesets.properties create mode 100644 pmd/rulesets/strings.xml create mode 100644 pmd/rulesets/unusedcode.xml create mode 100644 pmd/xdocs/changes.xml create mode 100644 pmd/xdocs/how-to.xml create mode 100644 pmd/xdocs/images/sample.gif create mode 100644 pmd/xdocs/index.xml create mode 100644 pmd/xdocs/navigation.xml create mode 100644 pmd/xdocs/properties.xml create mode 100644 pmd/xdocs/tasks.xml diff --git a/pmd/LICENSE.txt b/pmd/LICENSE.txt new file mode 100644 index 00000000..c7fddaed --- /dev/null +++ b/pmd/LICENSE.txt @@ -0,0 +1,57 @@ + + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" and + * "Apache Wiki Maven Plugin" must not be used to endorse or promote products + * derived from this software without prior written permission. For + * written permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * "Apache Interactive Maven Plugin", nor may "Apache" appear in their name, without + * prior written permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * ==================================================================== + */ diff --git a/pmd/plugin.jelly b/pmd/plugin.jelly new file mode 100644 index 00000000..9ac3814e --- /dev/null +++ b/pmd/plugin.jelly @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Running the PMD task with ${maven.pmd.rulesetfiles} ... + + + + + + + + + + + Converting the PMD report to XDOC ... + + + + + + diff --git a/pmd/plugin.properties b/pmd/plugin.properties new file mode 100644 index 00000000..42a851fd --- /dev/null +++ b/pmd/plugin.properties @@ -0,0 +1,14 @@ +# ------------------------------------------------------------------- +# P L U G I N P R O P E R I E S +# ------------------------------------------------------------------- +# PMD plugin. +# ------------------------------------------------------------------- + +# enable/disable PMD + +maven.pmd.enable = true + +# comma seperated list of rules to use +# rulesets/experimental.xml is, well, experimental ... use at your own risk + +maven.pmd.rulesetfiles=rulesets/strings.xml,rulesets/junit.xml,rulesets/braces.xml,rulesets/basic.xml,rulesets/unusedcode.xml,rulesets/design.xml,rulesets/naming.xml,rulesets/imports.xml,rulesets/codesize.xml diff --git a/pmd/pmd.jsl b/pmd/pmd.jsl new file mode 100644 index 00000000..8e982780 --- /dev/null +++ b/pmd/pmd.jsl @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + PMD Results + + + +
+

+ The following document contains the results of + PMD. +

+
+ +
+ + + + + + + + + + + +
FilesErrors
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
FilesViolations
+ ${name} +
+ + + + + + + + + + + + + + + + + + + + + +
ViolationLine
+ + ${htmlescape.getText(errorMessage)} + + + + + + + + + ${line} + + + ${line} + + +
+
+
+
+
+ +
+
+
diff --git a/pmd/project.properties b/pmd/project.properties new file mode 100644 index 00000000..b443601d --- /dev/null +++ b/pmd/project.properties @@ -0,0 +1 @@ +maven.xdoc.date = bottom diff --git a/pmd/project.xml b/pmd/project.xml new file mode 100644 index 00000000..768ef821 --- /dev/null +++ b/pmd/project.xml @@ -0,0 +1,109 @@ + + + + 3 + maven-pmd-plugin + Maven PMD Plug-in + 0.5 + + SourceForge + http://www.sourceforge.net/projects/maven-plugins/ + http://sourceforge.net/sflogo.php?group_id=61626&type=5 + + 2002 + org.apache.maven + http://jakarta.apache.org/turbine/maven/images/maven.jpg + + + jakarta + + + This plugin provides a more or less seamless integration + with Maven and the PMD static source code analyzer + + + Maven Plugin for PMD + + http://maven-plugins.sourceforge.net/pmd/ + http://nagoya.apache.org/scarab/servlet/scarab/ + maven-plugins.sf.net + /home/groups/m/ma/maven-plugins/htdocs/pmd/ + /home/groups/m/ma/maven-plugins/htdocs/pmd/distributions/ + + + scm:cvs:pserver:anoncvs@cvs.maven-plugins.sourceforge.net:/cvsroot/maven-plugins/:maven-plugins/pmd + http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/maven-plugins/maven-plugins/pmd/ + + + + + Maven-Plugins User List + maven-plugins-developer-subscribe@lists.sourceforge.net + maven-plugins-user-unsubscribe@lists.sourceforge.net + http://sourceforge.net/mailarchive/forum.php?forum_id=11777 + + + Maven-Plugins Developer List + maven-plugins-developer-subscribe@lists.sourceforge.net + maven-plugins-developer-unsubscribe@lists.sourceforge.net + http://sourceforge.net/mailarchive/forum.php?forum_id=11782 + + + Maven-Plugins CVS Commits List + ${pom.id}-cvs-subscribe@lists.sourceforge.net + ${pom.id}-cvs-unsubscribe@lists.sourceforge.net + http://sourceforge.net/mailarchive/forum.php?forum_id=11781 + + + + + + Siegfried Goeschl + wdsgoe + siegfried.goeschl@it20one.at + IT20one + + Software Developer + + + + Martin Poeschl + mpoeschl + mpoeschl@marmot.at + Tucana.at + + Software Developer + + + + + + + pmd + 1.03 + http://pmd.sourceforge.net + + root + + + + + + + + ${basedir} + + plugin.jelly + plugin.properties + project.properties + project.xml + pmd.jsl + rulesets/** + + + + + + + + diff --git a/pmd/rulesets/basic.xml b/pmd/rulesets/basic.xml new file mode 100644 index 00000000..0e0a286a --- /dev/null +++ b/pmd/rulesets/basic.xml @@ -0,0 +1,209 @@ + + + + +The Basic Ruleset contains a collection of good practice rules +which everyone should follow. + + + + + +Empty Catch Block finds instances where an exception is caught, +but nothing is done. In most circumstances, this swallows an exception +which should either be acted on or reported. + + + + + + + + + +Empty If Statement finds instances where a condition is checked but nothing is done about it. + + + + + + + + +Empty While Statement finds all instances where a while statement +does nothing. If it is a timing loop, then you should use Thread.sleep() for it; if +it's a while loop that does a lot in the exit expression, rewrite it to make it clearer. + + + + + + + + + + Avoid unnecessary temporaries when converting primitives to Strings + + + + + + + + + + + +Avoid empty try blocks - what's the point? + + + + + + + + + +Avoid empty finally blocks - these can be deleted. + + + + + + + + + + Avoid empty switch statements. + + + + + + + + + +Override both public boolean Object.equals(Object other), and public int Object.hashCode(), or override neither. Even if you are inheriting a hashCode() from a parent class, consider implementing hashCode and explicitly delegating to your superclass. + + + + + + + + + + + Avoid jumbled loop incrementers - it's usually a mistake, and it's confusing even if it's what's intended. + + + + + + + + + + + diff --git a/pmd/rulesets/braces.xml b/pmd/rulesets/braces.xml new file mode 100644 index 00000000..8e9a3c99 --- /dev/null +++ b/pmd/rulesets/braces.xml @@ -0,0 +1,92 @@ + + + + +The Braces Ruleset contains a collection of braces rules. + + + + + + Avoid using if..else statements without using curly braces + + + + + + + + + + Avoid using 'while' statements without using curly braces + + + + + + + + + + Avoid using 'for' statements without using curly braces + + + + + + + + + + + Avoid using if statements without using curly braces + + + + + + + + + + + + + diff --git a/pmd/rulesets/codesize.xml b/pmd/rulesets/codesize.xml new file mode 100644 index 00000000..8d9753f7 --- /dev/null +++ b/pmd/rulesets/codesize.xml @@ -0,0 +1,124 @@ + + + + +The Code Size Ruleset contains a collection of rules that find code size related problems. + + + + + +Excessive Method Length usually means that the method is doing +too much. There is usually quite a bit of Cut and Paste there +as well. Try to reduce the method size by creating helper methods, +and removing cut and paste. + +Default value is 2.5 sigma greater than the mean. + +NOTE: In version 0.9 and higher, their are three parameters available: +minimum - Minimum Length before reporting. +sigma - Std Deviations away from the mean before reporting. +topscore - The Maximum Number of reports to generate. + +At this time, only one can be used at a time. + + + + + + + + + + + + + + +This checks to make sure that the Parameter Lists in the project aren't +getting too long. If there are long parameter lists, then that is +generally indicative that another object is hiding around there. + +Basically, try to group the parameters together. + +Default value is 2.5 sigma greater than the mean. + +NOTE: In version 0.9 and higher, their are three parameters available: +minimum - Minimum Length before reporting. +sigma - Std Deviations away from the mean before reporting. +topscore - The Maximum Number of reports to generate. + +At this time, only one can be used at a time. + + + + + + + + + + + + + + +Long Class files are indications that the class may be trying to +do too much. Try to break it down, and reduce the size to something +managable. + +Default value is 2.5 sigma greater than the mean. + +NOTE: In version 0.9 and higher, their are three parameters available: +minimum - Minimum Length before reporting. +sigma - Std Deviations away from the mean before reporting. +topscore - The Maximum Number of reports to generate. + +At this time, only one can be used at a time. + + + + + + + + + + + + + + + diff --git a/pmd/rulesets/design.xml b/pmd/rulesets/design.xml new file mode 100644 index 00000000..ddd414f7 --- /dev/null +++ b/pmd/rulesets/design.xml @@ -0,0 +1,176 @@ + + + + +The Design Ruleset contains a collection of rules that find questionable designs. + + + + + + If you have a class that has nothing but static methods, consider making it a Singleton + + + + + + + + + + + Avoid using implementation types (i.e., HashSet); use the interface (i.e, Set) instead + + + + + + + + + + +Avoid unnecessary if..then..else statements when returning a boolean + + + + + + + + + + Switch statements should have a default label. + + + + + + + + + + A method should have only one exit point, and that should be the last statement in the method. + + + + 0) { + return "hey"; // oops, multiple exit points! + } + return "hi"; + } +} +]]> + + + + + + + Deeply nested if..then statements are hard to read. + + + + + +y) { + if (y>z) { + if (z==x) { + // this is officially out of control now + } + } + } + } +} +]]> + + + + + + +Reassigning values to parameters is a questionable practice. Use a temporary local variable instead. + + + + + + + + + + diff --git a/pmd/rulesets/experimental.xml b/pmd/rulesets/experimental.xml new file mode 100644 index 00000000..01510879 --- /dev/null +++ b/pmd/rulesets/experimental.xml @@ -0,0 +1,90 @@ + + + + +This is the sandbox. + + + + + + + diff --git a/pmd/rulesets/favorites.xml b/pmd/rulesets/favorites.xml new file mode 100644 index 00000000..a365581e --- /dev/null +++ b/pmd/rulesets/favorites.xml @@ -0,0 +1,23 @@ + + + + +The Favorites ruleset contains links to rules that I like to use. Usually I +combine this ruleset with the unusedcode.xml, basic.xml, and import.xml rulesets for my projects. +This ruleset also serves as an example of how to reference one ruleset from another. + + + + + + + + + + + + + + + + diff --git a/pmd/rulesets/imports.xml b/pmd/rulesets/imports.xml new file mode 100644 index 00000000..17471601 --- /dev/null +++ b/pmd/rulesets/imports.xml @@ -0,0 +1,75 @@ + + + + +These rules deal with different problems that can occur with a class' import statements. + + + + + Avoid duplicate import statements. + + + + + + + + + + Avoid importing anything from the package 'java.lang'. These classes are automatically imported (JLS 7.5.3). + + + + + + + + + + Avoid unused import statements. + + + + + + + + + + + diff --git a/pmd/rulesets/junit.xml b/pmd/rulesets/junit.xml new file mode 100644 index 00000000..1983c165 --- /dev/null +++ b/pmd/rulesets/junit.xml @@ -0,0 +1,48 @@ + + + + +These rules deal with different problems that can occur with JUnit tests. + + + + + Some JUnit framework methods are easy to misspell. + + + + + + + + + + + The suite() method in a JUnit test needs to be both public and static. + + + + + + + + + + + diff --git a/pmd/rulesets/naming.xml b/pmd/rulesets/naming.xml new file mode 100644 index 00000000..ffdec972 --- /dev/null +++ b/pmd/rulesets/naming.xml @@ -0,0 +1,85 @@ + + + + +The Naming Ruleset contains a collection of rules about names - too long, too short, and so forth. + + + + + +Detects when a field, local or parameter has a short name. + + + + + + + + + + + +Detects when a field, formal or local variable is declared with a big name. + + + + + + + + + + + +Detects when very short method names are used. + + + + + + + + + + + + + diff --git a/pmd/rulesets/newrules.xml b/pmd/rulesets/newrules.xml new file mode 100644 index 00000000..50b5cfff --- /dev/null +++ b/pmd/rulesets/newrules.xml @@ -0,0 +1,12 @@ + + + + +These are new rules for the next release + + + + + + + diff --git a/pmd/rulesets/rulesets.properties b/pmd/rulesets/rulesets.properties new file mode 100644 index 00000000..5a67aed6 --- /dev/null +++ b/pmd/rulesets/rulesets.properties @@ -0,0 +1 @@ +rulesets.filenames=rulesets/strings.xml,rulesets/junit.xml,rulesets/braces.xml,rulesets/basic.xml,rulesets/unusedcode.xml,rulesets/design.xml,rulesets/naming.xml,rulesets/imports.xml,rulesets/codesize.xml \ No newline at end of file diff --git a/pmd/rulesets/strings.xml b/pmd/rulesets/strings.xml new file mode 100644 index 00000000..b013d19d --- /dev/null +++ b/pmd/rulesets/strings.xml @@ -0,0 +1,71 @@ + + + + +These rules deal with different problems that can occur with String manipulation. + + + + + + Avoid instantiating String objects; this is usually unnecessary. + + + + + + + + + +Code containing duplicate String literals can usually be improved by declaring the String as a constant field. + + + + + + + + + + + + Avoid calling toString() on String objects; this is unnecessary + + + + + + + + + + + diff --git a/pmd/rulesets/unusedcode.xml b/pmd/rulesets/unusedcode.xml new file mode 100644 index 00000000..947fe5f9 --- /dev/null +++ b/pmd/rulesets/unusedcode.xml @@ -0,0 +1,105 @@ + + + + +The Unused Code Ruleset contains a collection of rules that find unused code. + + + + + +Unused Private Field detects when a private field is declared +that is not used by the class. + + + + + + + + +Unused Local Variables detects when a variable is declared, but not +used (except for possibly initial assignment) + + + + + + + + + + + +Unused Private Method detects when a private method is declared but is unused. + + + + + + + + + +Avoid passing parameters to methods and then not using those parameters. + + + + + + + + + +Unnecessary constructor detects when a constructor is not necessary; i.e., when there's only one constructor, +it's public, has an empty body, and takes no arguments. + + + + + + + + + + diff --git a/pmd/xdocs/changes.xml b/pmd/xdocs/changes.xml new file mode 100644 index 00000000..32eb4a3e --- /dev/null +++ b/pmd/xdocs/changes.xml @@ -0,0 +1,52 @@ + + + + Changes + Siegfried Goeschl + Vincent Massol + + + + + + + Moved the PMD plugin from the + Maven-Plugins SF project + to the Maven project. + + + + + + Updated to used PMD 1.03 + + + Updated to work for maven-1,0-beta8 + + + + + + PMD can be enabled/disabled by setting maven.pmd.enable + + + Upgraded to PMD 1.01 and removed the DVSLPath Tool + since it is not longer needed + + + Added files for integration with the existing maven-plugin buikd + + + Tom Copeland fixed some stuff in the Jelly script + + + + + + Updated to used PMD 1.0 + + + + + + diff --git a/pmd/xdocs/how-to.xml b/pmd/xdocs/how-to.xml new file mode 100644 index 00000000..2a80c39c --- /dev/null +++ b/pmd/xdocs/how-to.xml @@ -0,0 +1,68 @@ + + + + + Maven PMD Plug-in How To + Siegfried Goeschl + + + +
+ + +

+ Usually I provide a custom plugin, e.g. "maven-it20one-plugin-1.0" + which sets the variable "maven.pmd.enable" to "true". Since all + plugins are parsed it is guaranteed that PMD will be executed +

+

+ The simple way is to define the property in + $MAVEN_HOME/bin/driver.properties +

+
+ + +

+ Assume that you have generated a DB layer having a few + hundreds Java source files. Apart from being curious you + don't want to have a PMD report for generated source files. + Simple put "maven.pmd.enable=false" into your project properties +

+
+ + +

+ You could fix the rule violations. On the other hand I find + some of the rules quite annoying. Rules can be removed by editing + the rulesets.properties. +

+

+ In other case you change the trigger of the rules directly in the + ruleset files to fine tune the reports. +

+
+ + +

+ "Those bloody contributors do not keep up with the + release - there is the new JAR out there for two + days and no update of the plugin ... having pizza, + coke, a joint and doing nothing" - Fine, as + long as we do not inhale ... ;-) +

+

+ The JAR picked up the plugin is defined in + $MAVEN_HOME/plugins/pmd/project.xml and can be + changed. +

+

+ Leave it, try it but don't whine will I have to carve + out a living with some paid work ... :-[] +

+
+ +
+ + + +
diff --git a/pmd/xdocs/images/sample.gif b/pmd/xdocs/images/sample.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6a7ebbd93d823af5580800d4d72c3c3c98f8b4b GIT binary patch literal 26498 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 + + + + + Maven PMD Plug-in + Siegfried Goeschl + + + +
+ +

+ This plugin generates a report of the PMD static source code + analyzer. +

+ + + +

+ Copy the downloaded plugin into the Maven plugin directory. + Any older version of the plugin should to be deleted to make + sure that the newest plugin is called +

+ +

+ Download the PMD binary distribution and put the PMD + jar into the repository. This has to be done manually + unless PMD is hosted on the Maven remote repository. +

+ +

+ Run "maven -g" and look out for documented PMD goals. + If you see some then the unpacking succeeded. +

+ +

+ The PMD plugin can be started through "maven pmd" + or integrated by using the following code snippet in + maven.xml: +

+ + + + + + +]]> + + +

+ The generated report has to be added manually to the + website which is usually done with navigation.xml. +

+ + + + + + + +]]> + + +

+ Another way to integrate the PMD plugin is to add it to the <reports> + section in your project.xml: +

+ + + + maven-jdepend-plugin + maven-checkstyle-plugin + maven-pmd-plugin + maven-changelog-plugin + maven-file-activity-plugin + maven-developer-activity-plugin + maven-javadoc-plugin + maven-jxr-plugin + maven-junit-report-plugin + maven-tasklist-plugin + +]]> + + +
+ + + +

+ And last but not least - thanks to + Together Teamlösungen for + their support of Open Source Software and their contributions + such as Enhydra Application + Server 5.0 ("Aonyx") and a couple of Maven plugins. +

+ +
+ +
+ + + +
diff --git a/pmd/xdocs/navigation.xml b/pmd/xdocs/navigation.xml new file mode 100644 index 00000000..0b5787be --- /dev/null +++ b/pmd/xdocs/navigation.xml @@ -0,0 +1,18 @@ + + + + + Maven PMD Plugin + + + + + + + + + + + + + diff --git a/pmd/xdocs/properties.xml b/pmd/xdocs/properties.xml new file mode 100644 index 00000000..9b02180a --- /dev/null +++ b/pmd/xdocs/properties.xml @@ -0,0 +1,36 @@ + + + + + PMD Plug-in Properties + Siegfried Goeschl + + + +
+ + + + + + + + + + + + + + + + +
PropertyOptional?Description
maven.pmd.enableNo + Enable/disable the PMD plugin. Has to be set to "true" + to enable the plugin +
maven.pmd.rulesetfilesYes + Defines the rule to be used for running PMD. Is + already defined in the plugin +
+
+ +
diff --git a/pmd/xdocs/tasks.xml b/pmd/xdocs/tasks.xml new file mode 100644 index 00000000..b1f9b193 --- /dev/null +++ b/pmd/xdocs/tasks.xml @@ -0,0 +1,22 @@ + + + + + Tasks + Siegfried Goeschl + + + +
+ +
    +
  • + Add a description of the violation if the PMD report + contains more metadata +
  • +
+
+
+ +
+