You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2013/02/04 21:53:13 UTC

svn commit: r1442345 - in /maven/plugins/trunk/maven-pmd-plugin/src: main/java/org/apache/maven/plugin/pmd/ test/java/org/apache/maven/plugin/pmd/ test/resources/unit/default-configuration/

Author: olamy
Date: Mon Feb  4 20:53:13 2013
New Revision: 1442345

URL: http://svn.apache.org/viewvc?rev=1442345&view=rev
Log:
[MPMD-161] PMD/CPD violation exclusions by class/issue
Submitted by Andrey Utis.

Added:
    maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml   (with props)
    maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml   (with props)
Modified:
    maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
    maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
    maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
    maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojoTest.java
    maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojoTest.java

Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java?rev=1442345&r1=1442344&r2=1442345&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/AbstractPmdViolationCheckMojo.java Mon Feb  4 20:53:13 2013
@@ -26,6 +26,7 @@ import org.apache.maven.plugins.annotati
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
@@ -74,14 +75,28 @@ public abstract class AbstractPmdViolati
      */
     @Parameter( property = "pmd.verbose", defaultValue = "false" )
     private boolean verbose;
+	
+     /**
+     * Print details of errors that cause build failure
+     */
+    @Parameter( property = "pmd.printFailingErrors", defaultValue = "false" )
+    private boolean printFailingErrors;
 
     /**
+     * File that lists classes and rules to be excluded from failures
+     * For PMD, this is a properties file
+     * For CPD, this is a text file that contains comma-separated lists of classes that are allowed to duplicate
+     */
+    @Parameter( property = "pmd.excludeFromFailureFile", defaultValue = "" )
+    private String excludeFromFailureFile;
+	
+    /**
      * The project to analyze.
      */
     @Component
     protected MavenProject project;
 
-    protected void executeCheck( String filename, String tagName, String key, int failurePriority )
+    protected void executeCheck( final String filename, final String tagName, final String key, final int failurePriority )
         throws MojoFailureException, MojoExecutionException
     {
         if ( aggregate && !project.isExecutionRoot() )
@@ -91,27 +106,30 @@ public abstract class AbstractPmdViolati
 
         if ( "java".equals( language ) || aggregate )
         {
-            File outputFile = new File( targetDirectory, filename );
+            if (!StringUtils.isEmpty(excludeFromFailureFile)) {
+                loadExcludeFromFailuresData(excludeFromFailureFile);
+            }
+            final File outputFile = new File( targetDirectory, filename );
 
             if ( outputFile.exists() )
             {
-                Reader reader = null;
+                final Reader reader = null;
                 try
                 {
-                    ViolationDetails<D> violations = getViolations( outputFile, failurePriority );
+                    final ViolationDetails<D> violations = getViolations( outputFile, failurePriority );
 
-                    List<D> failures = violations.getFailureDetails();
-                    List<D> warnings = violations.getWarningDetails();
+                    final List<D> failures = violations.getFailureDetails();
+                    final List<D> warnings = violations.getWarningDetails();
 
                     if ( verbose )
                     {
                         printErrors( failures, warnings );
                     }
 
-                    int failureCount = failures.size();
-                    int warningCount = warnings.size();
+                    final int failureCount = failures.size();
+                    final int warningCount = warnings.size();
 
-                    String message = getMessage( failureCount, warningCount, key, outputFile );
+                    final String message = getMessage( failureCount, warningCount, key, outputFile );
 
                     if ( failureCount > 0 && isFailOnViolation() )
                     {
@@ -120,12 +138,12 @@ public abstract class AbstractPmdViolati
 
                     this.getLog().info( message );
                 }
-                catch ( IOException e )
+                catch ( final IOException e )
                 {
                     throw new MojoExecutionException( "Unable to read PMD results xml: " + outputFile.getAbsolutePath(),
                                                       e );
                 }
-                catch ( XmlPullParserException e )
+                catch ( final XmlPullParserException e )
                 {
                     throw new MojoExecutionException( "Unable to read PMD results xml: " + outputFile.getAbsolutePath(),
                                                       e );
@@ -142,6 +160,8 @@ public abstract class AbstractPmdViolati
         }
     }
 
+	protected abstract void loadExcludeFromFailuresData(String excludeFromFailureFile) throws MojoExecutionException;
+	
     /**
      * Method for collecting the violations found by the PMD tool
      *
@@ -151,20 +171,23 @@ public abstract class AbstractPmdViolati
      * @throws XmlPullParserException
      * @throws IOException
      */
-    private ViolationDetails<D> getViolations( File analysisFile, int failurePriority )
+    private ViolationDetails<D> getViolations( final File analysisFile, final int failurePriority )
         throws XmlPullParserException, IOException
     {
-        List<D> failures = new ArrayList<D>();
-        List<D> warnings = new ArrayList<D>();
+        final List<D> failures = new ArrayList<D>();
+        final List<D> warnings = new ArrayList<D>();
 
-        List<D> violations = getErrorDetails( analysisFile );
+        final List<D> violations = getErrorDetails( analysisFile );
 
-        for ( D violation : violations )
+        for ( final D violation : violations )
         {
-            int priority = getPriority( violation );
-            if ( priority <= failurePriority )
+            final int priority = getPriority( violation );
+            if ( priority <= failurePriority && !isExcludedFromFailure(violation))
             {
                 failures.add( violation );
+                if (printFailingErrors) {
+                    printError(violation, "Failure");
+                }
             }
             else
             {
@@ -172,7 +195,7 @@ public abstract class AbstractPmdViolati
             }
         }
 
-        ViolationDetails<D> details = newViolationDetailsInstance();
+        final ViolationDetails<D> details = newViolationDetailsInstance();
         details.setFailureDetails( failures );
         details.setWarningDetails( warnings );
         return details;
@@ -180,6 +203,8 @@ public abstract class AbstractPmdViolati
 
     protected abstract int getPriority( D errorDetail );
 
+	protected abstract boolean isExcludedFromFailure(D errorDetail);
+	
     protected abstract ViolationDetails<D> newViolationDetailsInstance();
 
     /**
@@ -188,14 +213,14 @@ public abstract class AbstractPmdViolati
      * @param failures list of failures
      * @param warnings list of warnings
      */
-    protected void printErrors( List<D> failures, List<D> warnings )
+    protected void printErrors( final List<D> failures, final List<D> warnings )
     {
-        for ( D warning : warnings )
+        for ( final D warning : warnings )
         {
             printError( warning, "Warning" );
         }
 
-        for ( D failure : failures )
+        for ( final D failure : failures )
         {
             printError( failure, "Failure" );
         }
@@ -210,9 +235,9 @@ public abstract class AbstractPmdViolati
      * @param outputFile
      * @return
      */
-    private String getMessage( int failureCount, int warningCount, String key, File outputFile )
+    private String getMessage( final int failureCount, final int warningCount, final String key, final File outputFile )
     {
-        StringBuilder message = new StringBuilder();
+        final StringBuilder message = new StringBuilder();
         if ( failureCount > 0 || warningCount > 0 )
         {
             if ( failureCount > 0 )

Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java?rev=1442345&r1=1442344&r2=1442345&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojo.java Mon Feb  4 20:53:13 2013
@@ -34,7 +34,11 @@ import org.codehaus.plexus.util.xml.pull
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.LineNumberReader;
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * Fail the build if there were any CPD violations in the source code.
@@ -55,6 +59,8 @@ public class CpdViolationCheckMojo
     @Parameter( property = "cpd.skip", defaultValue = "false" )
     private boolean skip;
 
+	private final List<Set<String>> exclusionList = new ArrayList<Set<String>>();
+	
     /**
      * Whether to fail the build if the validation check fails.
      *
@@ -112,6 +118,73 @@ public class CpdViolationCheckMojo
         return details.getDuplications();
     }
 
+	 @Override
+    protected boolean isExcludedFromFailure(final Duplication errorDetail) {
+        final Set<String> uniquePaths = new HashSet<String>();
+        for (final CpdFile cpdFile : errorDetail.getFiles()) {
+            uniquePaths.add(cpdFile.getPath());
+        }
+        for (final Set<String> singleExclusionGroup : exclusionList) {
+            if (uniquePaths.size() == singleExclusionGroup.size() && duplicationExcludedByGroup(uniquePaths, singleExclusionGroup)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    private boolean duplicationExcludedByGroup(final Set<String> uniquePaths, final Set<String> singleExclusionGroup) {
+        for (final String path : uniquePaths) {
+            if (!fileExcludedByGroup(path, singleExclusionGroup)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private boolean fileExcludedByGroup(final String path, final Set<String> singleExclusionGroup) {
+        final String formattedPath = path.replace('\\', '.').replace('/', '.');
+        for (final String className : singleExclusionGroup) {
+            if (formattedPath.contains(className)) {
+                return true;
+            }
+        }
+        return false;
+    }
+	
+    @Override
+    protected void loadExcludeFromFailuresData(final String excludeFromFailureFile) throws MojoExecutionException {
+        LineNumberReader reader = null;
+        try {
+            reader = new LineNumberReader(new FileReader(excludeFromFailureFile));
+            String line = null;
+            while ((line = reader.readLine()) != null) {
+                exclusionList.add(createSetFromExclusionLine(line));
+            }
+        }
+        catch (final IOException e) {
+            throw new MojoExecutionException("Cannot load file " + excludeFromFailureFile, e);
+        }
+        finally {
+            if (reader != null) {
+                try {
+                    reader.close();
+                }
+                catch (final IOException e) {
+                    getLog().warn("Cannot close file " + excludeFromFailureFile, e);
+                }
+            }
+        }
+        
+    }
+
+    private Set<String> createSetFromExclusionLine(final String line) {
+        final Set<String> result = new HashSet<String>();
+        for(final String className : line.split(",")) {
+            result.add(className.trim());
+        }
+        return result;
+    }
+	
     @Override
     protected int getPriority( Duplication errorDetail )
     {

Modified: maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java?rev=1442345&r1=1442344&r2=1442345&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/main/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojo.java Mon Feb  4 20:53:13 2013
@@ -36,7 +36,13 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
 
 /**
  * Fail the build if there were any PMD violations in the source code.
@@ -65,6 +71,8 @@ public class PmdViolationCheckMojo
     @Parameter( property = "pmd.skip", defaultValue = "false" )
     private boolean skip;
 
+	private final Map<String, Set<String>> excludeFromFailureClasses = new HashMap<String, Set<String>>();
+	
     /**
      * {@inheritDoc}
      */
@@ -77,6 +85,45 @@ public class PmdViolationCheckMojo
         }
     }
 
+	@Override
+    protected void loadExcludeFromFailuresData(final String excludeFromFailureFile) throws MojoExecutionException {
+        final Properties props = new Properties();
+        try {
+            props.load(new FileReader(excludeFromFailureFile));
+        }
+        catch (final IOException e) {
+            throw new MojoExecutionException("Cannot load properties file " + excludeFromFailureFile, e);
+        }
+        for (final Entry<Object, Object> propEntry : props.entrySet()) {
+            final Set<String> excludedRuleSet = new HashSet<String>();
+            final String className = propEntry.getKey().toString();
+            final String[] excludedRules = propEntry.getValue().toString().split(",");
+            for (final String excludedRule : excludedRules) {
+                excludedRuleSet.add(excludedRule.trim());
+            }
+            excludeFromFailureClasses.put(className, excludedRuleSet);
+        }
+    }
+	
+    @Override
+    protected boolean isExcludedFromFailure(final Violation errorDetail) {
+        final String className = extractClassName(errorDetail);
+        final Set<String> excludedRuleSet = excludeFromFailureClasses.get(className);
+        return excludedRuleSet != null && excludedRuleSet.contains(errorDetail.getRule());
+    }
+    
+    private String extractClassName(final Violation errorDetail) {
+		//for some reason, some violations don't contain the package name, so we have to guess the full class name
+        if (errorDetail.getViolationPackage() != null && errorDetail.getViolationClass() != null) {
+            return errorDetail.getViolationPackage() + "." + errorDetail.getViolationClass();
+        }
+        else {
+            final String fileName = errorDetail.getFileName();
+            final int javaIdx = fileName.indexOf("\\java\\"); 
+            return fileName.substring(javaIdx >= 0 ? javaIdx + 6 : 0, fileName.length() - 5).replace('\\', '.');
+        }
+    }
+	
     /**
      * {@inheritDoc}
      */

Modified: maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojoTest.java?rev=1442345&r1=1442344&r2=1442345&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojoTest.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/CpdViolationCheckMojoTest.java Mon Feb  4 20:53:13 2013
@@ -32,6 +32,7 @@ public class CpdViolationCheckMojoTest
     extends AbstractMojoTestCase
 {
     /** {@inheritDoc} */
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -43,14 +44,14 @@ public class CpdViolationCheckMojoTest
     {
         try
         {
-            File testPom = new File( getBasedir(),
+            final File testPom = new File( getBasedir(),
                                      "src/test/resources/unit/default-configuration/pmd-check-default-configuration-plugin-config.xml" );
-            CpdViolationCheckMojo mojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
+            final CpdViolationCheckMojo mojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
             mojo.execute();
 
             fail( "MojoFailureException should be thrown." );
         }
-        catch ( Exception e )
+        catch ( final Exception e )
         {
             assertTrue( true );
         }
@@ -62,12 +63,12 @@ public class CpdViolationCheckMojoTest
 
         File testPom = new File( getBasedir(),
                                  "src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
+        final CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
         mojo.execute();
 
         testPom = new File( getBasedir(),
                             "src/test/resources/unit/default-configuration/pmd-check-notfailonviolation-plugin-config.xml" );
-        CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
+        final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
         cpdViolationMojo.execute();
 
         assertTrue( true );
@@ -78,16 +79,30 @@ public class CpdViolationCheckMojoTest
     {
         try
         {
-            File testPom = new File( getBasedir(),
+            final File testPom = new File( getBasedir(),
                                      "src/test/resources/unit/custom-configuration/pmd-check-exception-test-plugin-config.xml" );
-            CpdViolationCheckMojo mojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
+            final CpdViolationCheckMojo mojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
             mojo.execute();
 
             fail( "MojoFailureException should be thrown." );
         }
-        catch ( Exception e )
+        catch ( final Exception e )
         {
             assertTrue( true );
         }
     }
+    
+    public void testExclusionsConfiguration() throws Exception {
+        File testPom = new File(getBasedir(),
+                "src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml");
+        final CpdReport mojo = (CpdReport) lookupMojo("cpd", testPom);
+        mojo.execute();
+
+        testPom = new File(getBasedir(),
+                "src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml");
+        final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo("cpd-check", testPom);
+        cpdViolationMojo.execute();
+        
+        assertTrue( true );
+    }       
 }

Modified: maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojoTest.java?rev=1442345&r1=1442344&r2=1442345&view=diff
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojoTest.java (original)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/java/org/apache/maven/plugin/pmd/PmdViolationCheckMojoTest.java Mon Feb  4 20:53:13 2013
@@ -34,6 +34,7 @@ public class PmdViolationCheckMojoTest
     /**
      * {@inheritDoc}
      */
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -45,14 +46,14 @@ public class PmdViolationCheckMojoTest
     {
         try
         {
-            File testPom = new File( getBasedir(),
+            final File testPom = new File( getBasedir(),
                                      "src/test/resources/unit/default-configuration/pmd-check-default-configuration-plugin-config.xml" );
-            PmdViolationCheckMojo mojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
+            final PmdViolationCheckMojo mojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
             mojo.execute();
 
             fail( "MojoFailureException should be thrown." );
         }
-        catch ( Exception e )
+        catch ( final Exception e )
         {
             assertTrue( true );
         }
@@ -63,12 +64,12 @@ public class PmdViolationCheckMojoTest
     {
         File testPom = new File( getBasedir(),
                                  "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        final PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
         mojo.execute();
 
         testPom = new File( getBasedir(),
                             "src/test/resources/unit/default-configuration/pmd-check-notfailonviolation-plugin-config.xml" );
-        PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
+        final PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
         pmdViolationMojo.execute();
 
         assertTrue( true );
@@ -79,7 +80,7 @@ public class PmdViolationCheckMojoTest
     {
         File testPom = new File( getBasedir(),
                                  "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        final PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
         mojo.execute();
 
         testPom = new File( getBasedir(),
@@ -95,7 +96,7 @@ public class PmdViolationCheckMojoTest
             pmdViolationMojo.execute();
             fail( "Exception Expected" );
         }
-        catch ( MojoFailureException e )
+        catch ( final MojoFailureException e )
         {
             System.out.println( "Caught Expected Message: " + e.getMessage() );// expected
         }
@@ -107,17 +108,33 @@ public class PmdViolationCheckMojoTest
     {
         try
         {
-            File testPom = new File( getBasedir(),
+            final File testPom = new File( getBasedir(),
                                      "src/test/resources/unit/custom-configuration/pmd-check-exception-test-plugin-config.xml" );
-            PmdViolationCheckMojo mojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
+            final PmdViolationCheckMojo mojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
             mojo.execute();
 
             fail( "MojoFailureException should be thrown." );
         }
-        catch ( Exception e )
+        catch ( final Exception e )
         {
             assertTrue( true );
         }
 
     }
+    
+    public void testViolationExclusion()
+            throws Exception
+        {
+            File testPom = new File( getBasedir(),
+                                     "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
+            final PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+            mojo.execute();
+
+            testPom = new File( getBasedir(),
+                                "src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml" );
+            final PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
+            pmdViolationMojo.execute();
+
+            assertTrue( true );
+        }
 }

Added: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml?rev=1442345&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml (added)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml Mon Feb  4 20:53:13 2013
@@ -0,0 +1,57 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>def.configuration</groupId>
+  <artifactId>default-configuration</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <inceptionYear>2006</inceptionYear>
+  <name>Maven PMD Plugin Exclusions Configuration Test</name>
+  <url>http://maven.apache.org</url>
+  <build>
+    <finalName>default-configuration</finalName>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <configuration>
+          <!-- project implementation="org.apache.maven.plugin.pmd.stubs.DefaultConfigurationMavenProjectStub"/-->
+          <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <failOnViolation>true</failOnViolation>
+          <verbose>false</verbose>  
+          <language>java</language>
+          <printFailingErrors>true</printFailingErrors>
+          <excludeFromFailureFile>${basedir}/src/test/resources/unit/excludes/cpd_exclude.txt</excludeFromFailureFile>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jxr-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-cpd-exclusions-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml?rev=1442345&view=auto
==============================================================================
--- maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml (added)
+++ maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml Mon Feb  4 20:53:13 2013
@@ -0,0 +1,56 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>custom.configuration</groupId>
+  <artifactId>custom-configuration</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+  <inceptionYear>2006</inceptionYear>
+  <name>Maven PMD Violation Check Custom Configuration Test</name>
+  <url>http://maven.apache.org</url>
+  <build>
+    <finalName>custom-configuration</finalName>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-pmd-plugin</artifactId>
+        <configuration>
+          <!-- project implementation="org.apache.maven.plugin.pmd.stubs.DefaultConfigurationMavenProjectStub"/-->
+          <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <failOnViolation>true</failOnViolation>
+          <failurePriority>3</failurePriority>
+          <verbose>false</verbose>  
+          <language>java</language>
+          <printFailingErrors>true</printFailingErrors>
+          <excludeFromFailureFile>${basedir}/src/test/resources/unit/excludes/pmd_exclude.properties</excludeFromFailureFile>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jxr-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-pmd-plugin/src/test/resources/unit/default-configuration/pmd-check-pmd-exclusions-configuration-plugin-config.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision