[MPMD-349] Upgrade Maven Reporting API to 3.1.1/Maven Reporting Impl to 3.2.0

This plugin hasn't been touched testwise for a very long time. The testing
approach from MPIR has been applied to accommodate M-R-Impl 3.2.0 and future
versions of it. The negative effect is that the parameter 'sourceEncoding'
has duplicated 'inputEncoding' from AbstractMavenReport for a long time.
For the sake of consistency it has been replaced with 'inputEncoding' which
breaks backward compatibility. Users are advised to use
${project.build.sourceEncoding} anyway.

This also upgrades for ITs:
* Maven Site Plugin to 3.12.1
* Maven Project Info Reports Plugin to 3.4.1
* Maven JXR Plugin to 3.3.0

This closes #84
diff --git a/pom.xml b/pom.xml
index 6e1b505..118d9af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,8 +91,10 @@
     <javaVersion>8</javaVersion><!-- Because PMD 6.35.0+ requires Java 8 -->
     <pmdVersion>6.48.0</pmdVersion>
     <slf4jVersion>1.7.36</slf4jVersion>
-    <sitePluginVersion>3.12.0</sitePluginVersion>
-    <projectInfoReportsPluginVersion>3.3.0</projectInfoReportsPluginVersion>
+    <aetherVersion>1.0.0.v20140518</aetherVersion>
+    <sitePluginVersion>3.12.1</sitePluginVersion>
+    <projectInfoReportsPluginVersion>3.4.1</projectInfoReportsPluginVersion>
+    <jxrPluginVersion>3.3.0</jxrPluginVersion>
     <project.build.outputTimestamp>2022-05-31T17:37:31Z</project.build.outputTimestamp>
   </properties>
 
@@ -203,18 +205,24 @@
         doxia-site-renderer requires transitively dom4j 1.1 which provides a very old version of jaxen (same jar).
         PMD requires a newer version of jaxen, which is not compatible.
       -->
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpclient</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
 
     <!-- shared -->
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-api</artifactId>
-      <version>3.1.0</version>
+      <version>3.1.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-impl</artifactId>
-      <version>3.1.0</version>
+      <version>3.2.0</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
@@ -243,11 +251,43 @@
     <dependency>
       <groupId>com.github.tomakehurst</groupId>
       <artifactId>wiremock</artifactId>
-      <!-- that's a very old version, but it's the newest one that brings in
-           a old guava version, that is compatible with maven 3.1.1.
-           maven 3.1.1 uses guava 11, wiremock 1.49 uses guava 13.0.1
-      -->
-      <version>1.49</version>
+      <version>1.58</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpclient</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-api</artifactId>
+      <version>${aetherVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-impl</artifactId>
+      <version>${aetherVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-connector-basic</artifactId>
+      <version>${aetherVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.aether</groupId>
+      <artifactId>aether-transport-wagon</artifactId>
+      <version>${aetherVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-http-lightweight</artifactId>
+      <version>3.5.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/src/it/MPMD-128-xref-link/pom.xml b/src/it/MPMD-128-xref-link/pom.xml
index f3728ce..1743494 100644
--- a/src/it/MPMD-128-xref-link/pom.xml
+++ b/src/it/MPMD-128-xref-link/pom.xml
@@ -57,7 +57,7 @@
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jxr-plugin</artifactId>
-      <version>2.3</version>
+      <version>@jxrPluginVersion@</version>
     </plugin>
    </plugins>
   </reporting>
diff --git a/src/it/MPMD-172/pom.xml b/src/it/MPMD-172/pom.xml
index dd59737..8f892d5 100644
--- a/src/it/MPMD-172/pom.xml
+++ b/src/it/MPMD-172/pom.xml
@@ -39,7 +39,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jxr-plugin</artifactId>
-        <version>2.4</version>
+        <version>@jxrPluginVersion@</version>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git a/src/it/MPMD-253-xref-link-multi-module/pom.xml b/src/it/MPMD-253-xref-link-multi-module/pom.xml
index d9d0f85..3fd048e 100644
--- a/src/it/MPMD-253-xref-link-multi-module/pom.xml
+++ b/src/it/MPMD-253-xref-link-multi-module/pom.xml
@@ -59,7 +59,7 @@
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jxr-plugin</artifactId>
-      <version>2.3</version>
+      <version>@jxrPluginVersion@</version>
     </plugin>
    </plugins>
   </reporting>
diff --git a/src/it/MPMD-270-325-JDK11/pom.xml b/src/it/MPMD-270-325-JDK11/pom.xml
index e79e700..296ef7d 100644
--- a/src/it/MPMD-270-325-JDK11/pom.xml
+++ b/src/it/MPMD-270-325-JDK11/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-280-JDK12/pom.xml b/src/it/MPMD-280-JDK12/pom.xml
index d7046e7..071d425 100644
--- a/src/it/MPMD-280-JDK12/pom.xml
+++ b/src/it/MPMD-280-JDK12/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-289-format-html-check/pom.xml b/src/it/MPMD-289-format-html-check/pom.xml
index 9d44fe0..b7233d1 100644
--- a/src/it/MPMD-289-format-html-check/pom.xml
+++ b/src/it/MPMD-289-format-html-check/pom.xml
@@ -30,6 +30,10 @@
     Then report format is html, xml format should still be created so that the check goal still works.
   </description>
 
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
   <build>
     <plugins>
       <plugin>
@@ -41,7 +45,6 @@
           <skip>false</skip>
           <failOnViolation>true</failOnViolation>
           <failurePriority>4</failurePriority>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
           <skipEmptyReport>false</skipEmptyReport>
           <format>html</format>
diff --git a/src/it/MPMD-295-JDK13/pom.xml b/src/it/MPMD-295-JDK13/pom.xml
index 4e8161a..5d7e0e5 100644
--- a/src/it/MPMD-295-JDK13/pom.xml
+++ b/src/it/MPMD-295-JDK13/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-302-JDK14/pom.xml b/src/it/MPMD-302-JDK14/pom.xml
index 9b7c1c7..86f4259 100644
--- a/src/it/MPMD-302-JDK14/pom.xml
+++ b/src/it/MPMD-302-JDK14/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-302-JDK15/pom.xml b/src/it/MPMD-302-JDK15/pom.xml
index 8db2e8b..6c3514c 100644
--- a/src/it/MPMD-302-JDK15/pom.xml
+++ b/src/it/MPMD-302-JDK15/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-304-toolchain-support/pom.xml b/src/it/MPMD-304-toolchain-support/pom.xml
index 5ea8c4c..c9770a3 100644
--- a/src/it/MPMD-304-toolchain-support/pom.xml
+++ b/src/it/MPMD-304-toolchain-support/pom.xml
@@ -54,7 +54,6 @@
           <failOnViolation>false</failOnViolation>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>10</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-312-JDK16/pom.xml b/src/it/MPMD-312-JDK16/pom.xml
index 14983bf..0f51ed6 100644
--- a/src/it/MPMD-312-JDK16/pom.xml
+++ b/src/it/MPMD-312-JDK16/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-312-JDK17/pom.xml b/src/it/MPMD-312-JDK17/pom.xml
index 3064ae2..0812305 100644
--- a/src/it/MPMD-312-JDK17/pom.xml
+++ b/src/it/MPMD-312-JDK17/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-332-JDK18/pom.xml b/src/it/MPMD-332-JDK18/pom.xml
index 5f45389..c447a31 100644
--- a/src/it/MPMD-332-JDK18/pom.xml
+++ b/src/it/MPMD-332-JDK18/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/MPMD-348-JDK19/pom.xml b/src/it/MPMD-348-JDK19/pom.xml
index 32ea2ec..8cdbf78 100644
--- a/src/it/MPMD-348-JDK19/pom.xml
+++ b/src/it/MPMD-348-JDK19/pom.xml
@@ -58,7 +58,6 @@
           <failurePriority>4</failurePriority>
           <printFailingErrors>true</printFailingErrors>
           <targetJdk>${java.version}</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <executions>
diff --git a/src/it/empty-rulesets/pom.xml b/src/it/empty-rulesets/pom.xml
index aa727dd..9ec4f56 100644
--- a/src/it/empty-rulesets/pom.xml
+++ b/src/it/empty-rulesets/pom.xml
@@ -52,7 +52,6 @@
           <failOnViolation>true</failOnViolation>
           <failurePriority>4</failurePriority>
           <targetJdk>1.7</targetJdk>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <minimumTokens>100</minimumTokens>
           <excludes>
             <exclude>**/*Bean.java</exclude>
diff --git a/src/it/mpmd-168-empty-report/pom.xml b/src/it/mpmd-168-empty-report/pom.xml
index 1d0f038..aaf54f0 100644
--- a/src/it/mpmd-168-empty-report/pom.xml
+++ b/src/it/mpmd-168-empty-report/pom.xml
@@ -31,6 +31,10 @@
     Verify the "skipEmptyReport" parameter.
   </description>
 
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
   <build>
     <plugins>
       <plugin>
@@ -51,7 +55,6 @@
         <configuration>
           <verbose>true</verbose>
           <minimumTokens>25</minimumTokens>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <failOnViolation>false</failOnViolation> <!-- force execution of both goals, will be checked with verify-script -->
           <skipPmdError>false</skipPmdError>
 <!--          <skipEmptyReport>false</skipEmptyReport> skipEmptyReport is false by default since 3.13.0 -->
@@ -74,7 +77,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jxr-plugin</artifactId>
-        <version>2.3</version>
+        <version>@jxrPluginVersion@</version>
       </plugin>
     </plugins>
   </reporting>
diff --git a/src/it/mpmd-168/pom.xml b/src/it/mpmd-168/pom.xml
index 7573801..dda7dff 100644
--- a/src/it/mpmd-168/pom.xml
+++ b/src/it/mpmd-168/pom.xml
@@ -31,6 +31,10 @@
     Verify the "skipEmptyReport" parameter.
   </description>
 
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
   <build>
     <plugins>
       <plugin>
@@ -51,7 +55,6 @@
         <configuration>
           <verbose>true</verbose>
           <minimumTokens>25</minimumTokens>
-          <sourceEncoding>UTF-8</sourceEncoding>
           <failOnViolation>false</failOnViolation> <!-- force execution of both goals, will be checked with verify-script -->
           <skipPmdError>false</skipPmdError>
           <skipEmptyReport>true</skipEmptyReport>
@@ -74,7 +77,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jxr-plugin</artifactId>
-        <version>2.3</version>
+        <version>@jxrPluginVersion@</version>
       </plugin>
     </plugins>
   </reporting>
diff --git a/src/main/java/org/apache/maven/plugins/pmd/AbstractPmdReport.java b/src/main/java/org/apache/maven/plugins/pmd/AbstractPmdReport.java
index afdce98..fcc9c2d 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/AbstractPmdReport.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/AbstractPmdReport.java
@@ -49,7 +49,6 @@
 import org.apache.maven.toolchain.ToolchainManager;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.PathTool;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 
 import net.sourceforge.pmd.PMDVersion;
@@ -74,14 +73,6 @@
     protected File targetDirectory;
 
     /**
-     * The output directory for the final HTML report. Note that this parameter is only evaluated if the goal is run
-     * directly from the command line or during the default lifecycle. If the goal is run indirectly as part of a site
-     * generation, the output directory configured in the Maven Site Plugin is used instead.
-     */
-    @Parameter( property = "project.reporting.outputDirectory", required = true )
-    protected File outputDirectory;
-
-    /**
      * Set the output format type, in addition to the HTML report. Must be one of: "none", "csv", "xml", "txt" or the
      * full class name of the PMD renderer to use. See the net.sourceforge.pmd.renderers package javadoc for available
      * renderers. XML is produced in any case, since this format is needed
@@ -173,22 +164,6 @@
     protected boolean aggregate;
 
     /**
-     * The file encoding to use when reading the Java sources.
-     *
-     * @since 2.3
-     */
-    @Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
-    private String sourceEncoding;
-
-    /**
-     * The file encoding when writing non-HTML reports.
-     *
-     * @since 2.5
-     */
-    @Parameter( property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}" )
-    private String outputEncoding;
-
-    /**
      * Whether to include the xml files generated by PMD/CPD in the site.
      *
      * @since 3.0
@@ -272,12 +247,6 @@
     // ----------------------------------------------------------------------
 
     /**
-     * The project to analyse.
-     */
-    @Parameter( defaultValue = "${project}", readonly = true, required = true )
-    protected MavenProject project;
-
-    /**
      * The projects in the reactor for aggregation report.
      */
     @Parameter( property = "reactorProjects", readonly = true )
@@ -290,12 +259,6 @@
     @Parameter( defaultValue = "${session}", required = true, readonly = true )
     protected MavenSession session;
 
-    /**
-     * Site rendering component for generating the HTML report.
-     */
-    @Component
-    private Renderer siteRenderer;
-
     @Component
     private ToolchainManager toolchainManager;
 
@@ -588,32 +551,6 @@
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected String getOutputDirectory()
-    {
-        return outputDirectory.getAbsolutePath();
-    }
-
-    protected String getSourceEncoding()
-    {
-        return sourceEncoding;
-    }
-
-    /**
-     * Gets the effective reporting output files encoding.
-     *
-     * @return The effective reporting output file encoding, never <code>null</code>.
-     * @since 2.5
-     */
-    @Override
-    protected String getOutputEncoding()
-    {
-        return ( outputEncoding != null ) ? outputEncoding : ReaderFactory.UTF_8;
-    }
-
     protected String determineCurrentRootLogLevel()
     {
         String logLevel = System.getProperty( "org.slf4j.simpleLogger.defaultLogLevel" );
@@ -694,9 +631,9 @@
 
     /**
      * Recursively add the modules of the aggregatedProject to the set of aggregatedModules.
-     * 
+     *
      * @param aggregatedProject the project being aggregated
-     * @param reactorProjectsMap map of (still) available reactor projects 
+     * @param reactorProjectsMap map of (still) available reactor projects
      * @throws MavenReportException if any
      */
     private Set<MavenProject> modulesForAggregatedProject( MavenProject aggregatedProject,
diff --git a/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java b/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
index 7bb71f5..1943c33 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
@@ -19,7 +19,6 @@
  * under the License.
  */
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.Locale;
@@ -34,8 +33,6 @@
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.apache.maven.toolchain.Toolchain;
-import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
 
 import net.sourceforge.pmd.cpd.JavaTokenizer;
 import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
@@ -134,36 +131,16 @@
     public void executeReport( Locale locale )
         throws MavenReportException
     {
+        ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
         try
         {
-            execute( locale );
+            Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
+
+            generateMavenSiteReport( locale );
         }
         finally
         {
-            if ( getSink() != null )
-            {
-                getSink().close();
-            }
-        }
-    }
-
-    private void execute( Locale locale )
-        throws MavenReportException
-    {
-        if ( !skip && canGenerateReport() )
-        {
-            ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
-            try
-            {
-                Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
-
-                generateMavenSiteReport( locale );
-            }
-            finally
-            {
-                Thread.currentThread().setContextClassLoader( origLoader );
-            }
-
+            Thread.currentThread().setContextClassLoader( origLoader );
         }
     }
 
@@ -230,7 +207,7 @@
             request.setMinimumTokens( minimumTokens );
             request.setLanguage( language );
             request.setLanguageProperties( languageProperties );
-            request.setSourceEncoding( determineEncoding( !filesToProcess.isEmpty() ) );
+            request.setSourceEncoding( getInputEncoding() );
             request.addFiles( filesToProcess.keySet() );
 
             request.setShowPmdLog( showPmdLog );
@@ -257,7 +234,7 @@
         }
         catch ( UnsupportedEncodingException e )
         {
-            throw new MavenReportException( "Encoding '" + getSourceEncoding() + "' is not supported.", e );
+            throw new MavenReportException( "Encoding '" + getInputEncoding() + "' is not supported.", e );
         }
         catch ( IOException e )
         {
@@ -272,27 +249,6 @@
         gen.generate( cpdResult.getDuplications() );
     }
 
-    private String determineEncoding( boolean showWarn )
-        throws UnsupportedEncodingException
-    {
-        String encoding = WriterFactory.FILE_ENCODING;
-        if ( StringUtils.isNotEmpty( getSourceEncoding() ) )
-        {
-
-            encoding = getSourceEncoding();
-            // test encoding as CPD will convert exception into a RuntimeException
-            WriterFactory.newWriter( new ByteArrayOutputStream(), encoding );
-
-        }
-        else if ( showWarn )
-        {
-            getLog().warn( "File encoding has not been set, using platform encoding " + WriterFactory.FILE_ENCODING
-                               + ", i.e. build is platform dependent!" );
-            encoding = WriterFactory.FILE_ENCODING;
-        }
-        return encoding;
-    }
-
     /**
      * {@inheritDoc}
      */
diff --git a/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java b/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java
index b373bee..9b0f202 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/PmdReport.java
@@ -51,7 +51,6 @@
 import org.codehaus.plexus.resource.loader.FileResourceCreationException;
 import org.codehaus.plexus.resource.loader.FileResourceLoader;
 import org.codehaus.plexus.resource.loader.ResourceNotFoundException;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 
 import net.sourceforge.pmd.renderers.Renderer;
@@ -287,35 +286,16 @@
     public void executeReport( Locale locale )
         throws MavenReportException
     {
+        ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
         try
         {
-            execute( locale );
+            Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
+
+            generateMavenSiteReport( locale );
         }
         finally
         {
-            if ( getSink() != null )
-            {
-                getSink().close();
-            }
-        }
-    }
-
-    private void execute( Locale locale )
-        throws MavenReportException
-    {
-        if ( !skip && canGenerateReport() )
-        {
-            ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
-            try
-            {
-                Thread.currentThread().setContextClassLoader( this.getClass().getClassLoader() );
-
-                generateMavenSiteReport( locale );
-            }
-            finally
-            {
-                Thread.currentThread().setContextClassLoader( origLoader );
-            }
+            Thread.currentThread().setContextClassLoader( origLoader );
         }
     }
 
@@ -382,7 +362,7 @@
         request.setLanguageAndVersion( language, targetJdk );
         request.setRulesets( resolveRulesets() );
         request.setAuxClasspath( typeResolution ? determineAuxClasspath() : null );
-        request.setSourceEncoding( getSourceEncoding() );
+        request.setSourceEncoding( getInputEncoding() );
         request.addFiles( filesToProcess.keySet() );
         request.setMinimumPriority( minimumPriority );
         request.setSuppressMarker( suppressMarker );
@@ -412,22 +392,6 @@
         pmdResult = PmdExecutor.execute( request );
     }
 
-    protected String getSourceEncoding()
-    {
-        String encoding = super.getSourceEncoding();
-        if ( StringUtils.isEmpty( encoding ) )
-        {
-            encoding = ReaderFactory.FILE_ENCODING;
-            if ( !filesToProcess.isEmpty() )
-            {
-                getLog().warn( "File encoding has not been set, using platform encoding " + ReaderFactory.FILE_ENCODING
-                               + ", i.e. build is platform dependent!" );
-            }
-        }
-        return encoding;
-    }
-
-
     /**
      * Resolves the configured rulesets and copies them as files into the {@link #rulesetsTargetDirectory}.
      *
diff --git a/src/site/apt/usage.apt.vm b/src/site/apt/usage.apt.vm
index 6b91235..99014e7 100644
--- a/src/site/apt/usage.apt.vm
+++ b/src/site/apt/usage.apt.vm
@@ -74,7 +74,7 @@
   The reports will link directly to the cross-referenced source if you enable this with the <<<linkXRef>>> parameter.
   See the {{{http://maven.apache.org/plugins/maven-jxr-plugin/}JXR plugin}} for more details.
 
-  If your source uses a non-default encoding, you can use the <<<sourceEncoding>>> parameter to tell Maven which
+  If your source uses a non-default encoding, you can use the <<<inputEncoding>>> parameter to tell Maven which
   encoding to use when reading the java source.  Note also the ability to exclude source which you want
   to ignore.
 
@@ -95,7 +95,7 @@
         <version>${project.version}</version>
         <configuration>
           <linkXref>true</linkXref>
-          <sourceEncoding>utf-8</sourceEncoding>
+          <inputEncoding>utf-8</inputEncoding>
           <minimumTokens>100</minimumTokens>
           <targetJdk>1.5</targetJdk>
           <excludes>
diff --git a/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTest.java b/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTest.java
deleted file mode 100644
index 3656d0d..0000000
--- a/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.apache.maven.plugins.pmd;
-
-/*
- * 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.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Locale;
-
-import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.siterenderer.DocumentContent;
-import org.apache.maven.doxia.siterenderer.RendererException;
-import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
-import org.apache.maven.execution.DefaultMavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.Mojo;
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-import org.codehaus.plexus.util.ReflectionUtils;
-import org.codehaus.plexus.util.WriterFactory;
-
-/**
- * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
- * @version $Id$
- * @since 2.5
- */
-public abstract class AbstractPmdReportTest
-    extends AbstractMojoTestCase
-{
-    @Override
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
-        CapturingPrintStream.init( true );
-    }
-
-    /**
-     * Renderer the sink from the report mojo.
-     *
-     * @param mojo not null
-     * @param outputHtml not null
-     * @throws RendererException if any
-     * @throws IOException if any
-     */
-    protected void renderer( AbstractPmdReport mojo, File outputHtml )
-        throws RendererException, IOException
-    {
-        SiteRenderingContext context = new SiteRenderingContext();
-        context.setDecoration( new DecorationModel() );
-        context.setTemplateName( "org/apache/maven/doxia/siterenderer/resources/default-site.vm" );
-        context.setLocale( Locale.ENGLISH );
-        
-        outputHtml.getParentFile().mkdirs();
-
-        try ( Writer writer = WriterFactory.newXmlWriter( outputHtml ) )
-        {
-            mojo.getSiteRenderer().mergeDocumentIntoSite( writer, (DocumentContent) mojo.getSink(), context );
-        }
-    }
-
-    /**
-     * Checks, whether the string <code>contained</code> is contained in
-     * the given <code>text</code> ignoring case.
-     *
-     * @param text the string in which the search is executed
-     * @param contains the string, the should be searched
-     * @return <code>true</code> if the string is contained, otherwise <code>false</code>.
-     */
-    public static boolean lowerCaseContains( String text, String contains )
-    {
-        return text.toLowerCase( Locale.ROOT ).contains( contains.toLowerCase( Locale.ROOT ) );
-    }
-
-    @Override
-    protected Mojo lookupMojo( String goal, File pom ) throws Exception
-    {
-        Mojo mojo = super.lookupMojo( goal, pom );
-        return mockMavenSession( mojo );
-    }
-
-    private Mojo mockMavenSession(Mojo mojo) throws IllegalAccessException {
-        String basedir = getBasedir();
-        if ( ReflectionUtils.getFieldByNameIncludingSuperclasses( "session", mojo.getClass() ) != null )
-        {
-            MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest() {
-                public String getBaseDirectory() {
-                    return basedir;
-                };
-            };
-            ReflectionUtils.setVariableValueInObject( mojo, "session",
-                    new MavenSession( null, null, executionRequest, null ) );
-        }
-        return mojo;
-    }
-}
diff --git a/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java b/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java
new file mode 100644
index 0000000..f0d5524
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugins/pmd/AbstractPmdReportTestCase.java
@@ -0,0 +1,168 @@
+package org.apache.maven.plugins.pmd;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Locale;
+
+import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+import org.apache.maven.plugin.testing.ArtifactStubFactory;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.project.DefaultProjectBuildingRequest;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+
+/**
+ * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
+ * @version $Id$
+ * @since 2.5
+ */
+public abstract class AbstractPmdReportTestCase
+    extends AbstractMojoTestCase
+{
+    private ArtifactStubFactory artifactStubFactory;
+
+    /**
+     * The current project to be test.
+     */
+    private MavenProject testMavenProject;
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        CapturingPrintStream.init( true );
+
+        artifactStubFactory = new DependencyArtifactStubFactory( getTestFile( "target" ), true, false );
+        artifactStubFactory.getWorkingDir().mkdirs();
+    }
+
+    /**
+     * Get the current Maven project
+     *
+     * @return the maven project
+     */
+    protected MavenProject getTestMavenProject()
+    {
+        return testMavenProject;
+    }
+
+    /**
+     * Get the generated report as file in the test maven project.
+     *
+     * @param name the name of the report.
+     * @return the generated report as file
+     * @throws IOException if the return file doesnt exist
+     */
+    protected File getGeneratedReport( String name )
+        throws IOException
+    {
+        String outputDirectory = getBasedir() + "/target/test/unit/" + getTestMavenProject().getArtifactId();
+
+        File report = new File( outputDirectory, name );
+        if ( !report.exists() )
+        {
+            throw new IOException( "File not found. Attempted: " + report );
+        }
+
+        return report;
+    }
+
+    /**
+     * Generate the report and return the generated file
+     *
+     * @param goal the mojo goal.
+     * @param pluginXml the name of the xml file in "src/test/resources/plugin-configs/".
+     * @return the generated HTML file
+     * @throws Exception if any
+     */
+    protected File generateReport( String goal, String pluginXml )
+        throws Exception
+    {
+        File pluginXmlFile = new File( getBasedir(), "src/test/resources/unit/" + pluginXml );
+        AbstractPmdReport mojo  = createReportMojo( goal, pluginXmlFile );
+        return generateReport( mojo, pluginXmlFile );
+    }
+
+    protected AbstractPmdReport createReportMojo( String goal, File pluginXmlFile )
+        throws Exception
+    {
+        AbstractPmdReport mojo = (AbstractPmdReport) lookupMojo( goal, pluginXmlFile );
+        assertNotNull( "Mojo not found.", mojo );
+
+        LegacySupport legacySupport = lookup( LegacySupport.class );
+        legacySupport.setSession( newMavenSession( new MavenProjectStub() ) );
+        DefaultRepositorySystemSession repoSession =
+            (DefaultRepositorySystemSession) legacySupport.getRepositorySession();
+        repoSession.setLocalRepositoryManager( new SimpleLocalRepositoryManagerFactory().newInstance( repoSession, new LocalRepository( artifactStubFactory.getWorkingDir() ) ) );
+
+        setVariableValueToObject( mojo, "session", legacySupport.getSession() );
+        setVariableValueToObject( mojo, "remoteRepositories", mojo.getProject().getRemoteArtifactRepositories() );
+        return mojo;
+    }
+
+    protected File generateReport( AbstractPmdReport mojo, File pluginXmlFile )
+        throws Exception
+    {
+        mojo.execute();
+
+        ProjectBuilder builder = lookup( ProjectBuilder.class );
+
+        ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
+        buildingRequest.setRepositorySession( lookup( LegacySupport.class ).getRepositorySession() );
+
+        testMavenProject = builder.build( pluginXmlFile, buildingRequest ).getProject();
+
+        File outputDir = mojo.getReportOutputDirectory();
+        String filename = mojo.getOutputName() + ".html";
+
+        return new File( outputDir, filename );
+    }
+
+    /**
+     * Read the contents of the specified file object into a string
+     */
+    protected String readFile( File pmdTestDir, String fileName ) throws IOException
+    {
+        return new String( Files.readAllBytes( pmdTestDir.toPath().resolve( fileName ) ) );
+    }
+
+
+    /**
+     * Checks, whether the string <code>contained</code> is contained in
+     * the given <code>text</code> ignoring case.
+     *
+     * @param text the string in which the search is executed
+     * @param contains the string, the should be searched
+     * @return <code>true</code> if the string is contained, otherwise <code>false</code>.
+     */
+    public static boolean lowerCaseContains( String text, String contains )
+    {
+        return text.toLowerCase( Locale.ROOT ).contains( contains.toLowerCase( Locale.ROOT ) );
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugins/pmd/CpdReportTest.java b/src/test/java/org/apache/maven/plugins/pmd/CpdReportTest.java
index 4970975..efb3d58 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/CpdReportTest.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/CpdReportTest.java
@@ -37,7 +37,7 @@
  * @version $Id$
  */
 public class CpdReportTest
-    extends AbstractPmdReportTest
+    extends AbstractPmdReportTestCase
 {
     /**
      * {@inheritDoc}
@@ -59,22 +59,15 @@
     public void testDefaultConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the CPD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/cpd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check the contents of cpd.html
-        String str = readFile( new File( getBasedir(), "target/test/unit/default-configuration/target/site/cpd.html" ) );
+        String str = readFile( generatedReport );
         assertTrue( lowerCaseContains( str, "AppSample.java" ) );
         assertTrue( lowerCaseContains( str, "App.java" ) );
         assertTrue( lowerCaseContains( str, "public String dup( String str )" ) );
@@ -93,11 +86,7 @@
     public void testTxtFormat()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/custom-configuration/cpd-txt-format-configuration-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
+        generateReport( "cpd", "custom-configuration/cpd-txt-format-configuration-plugin-config.xml" );
 
         // check if the CPD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/cpd.xml" );
@@ -121,35 +110,20 @@
     public void testCustomConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "cpd", "custom-configuration/cpd-custom-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the CPD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/cpd.csv" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
+        String str = readFile( generatedReport );
         // Contents that should NOT be in the report
-        String str = readFile( new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" ) );
         assertFalse( lowerCaseContains( str, "/Sample.java" ) );
-
-        str = readFile( new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" ) );
         assertFalse( lowerCaseContains( str, "public void duplicateMethod( int i )" ) );
-
         // Contents that should be in the report
-        str = readFile( new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" ) );
         assertTrue( lowerCaseContains( str, "AnotherSample.java" ) );
-
-        str = readFile( new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" ) );
         assertTrue( lowerCaseContains( str, "public static void main( String[] args )" ) );
-
-        str = readFile( new File( getBasedir(), "target/test/unit/custom-configuration/target/site/cpd.html" ) );
         assertTrue( lowerCaseContains( str, "private String unusedMethod(" ) );
     }
 
@@ -164,10 +138,10 @@
         try
         {
             File testPom =
-                new File( getBasedir(), "src/test/resources/unit/invalid-format/cpd-invalid-format-plugin-config.xml" );
-            CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-            setVariableValueToObject( mojo, "compileSourceRoots", mojo.project.getCompileSourceRoots() );
-            mojo.execute();
+                    new File( getBasedir(), "src/test/resources/unit/invalid-format/cpd-invalid-format-plugin-config.xml" );
+            AbstractPmdReport mojo  = createReportMojo( "cpd", testPom );
+            setVariableValueToObject( mojo, "compileSourceRoots", mojo.getProject().getCompileSourceRoots() );
+            generateReport( mojo, testPom );
 
             fail( "MavenReportException must be thrown" );
         }
@@ -205,20 +179,17 @@
     public void testWriteNonHtml()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        assertNotNull( mojo );
-        mojo.execute();
+        generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
 
-        File tReport = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
+        // check if the CPD files were generated
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        Document pmdCpdDocument = builder.parse( tReport );
+        Document pmdCpdDocument = builder.parse( generatedFile );
         assertNotNull( pmdCpdDocument );
 
-        String str = readFile( tReport );
+        String str = readFile( generatedFile );
         assertTrue( lowerCaseContains( str, "AppSample.java" ) );
         assertTrue( lowerCaseContains( str, "App.java" ) );
         assertTrue( lowerCaseContains( str, "public String dup( String str )" ) );
@@ -232,21 +203,16 @@
     public void testIncludeXmlInSite()
             throws Exception
     {
-        File testPom =
-                new File( getBasedir(),
-                          "src/test/resources/unit/default-configuration/cpd-report-include-xml-in-site-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        assertNotNull( mojo );
-        mojo.execute();
+        generateReport( "cpd", "default-configuration/cpd-report-include-xml-in-site-plugin-config.xml" );
 
-        File tReport = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
-        assertTrue( FileUtils.fileExists( tReport.getAbsolutePath() ) );
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        Document pmdCpdDocument = builder.parse( tReport );
+        Document pmdCpdDocument = builder.parse( generatedFile );
         assertNotNull( pmdCpdDocument );
 
-        String str = readFile( tReport );
+        String str = readFile( generatedFile );
         assertTrue( str.contains( "</pmd-cpd>" ) );
 
         File siteReport = new File( getBasedir(), "target/test/unit/default-configuration/target/site/cpd.xml" );
@@ -260,28 +226,19 @@
     public void testSkipEmptyReportConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(), "src/test/resources/unit/empty-report/cpd-skip-empty-report-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
-
         // verify the generated files do not exist because PMD was skipped
-        File generatedFile = new File( getBasedir(), "target/test/unit/empty-report/target/site/cpd.html" );
-        assertFalse( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        File generatedReport = generateReport( "cpd", "empty-report/cpd-skip-empty-report-plugin-config.xml" );
+        assertFalse( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
     }
 
     public void testEmptyReportConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(), "src/test/resources/unit/empty-report/cpd-empty-report-plugin-config.xml" );
-        CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
-
         // verify the generated files do exist, even if there are no violations
-        File generatedFile = new File( getBasedir(), "target/test/unit/empty-report/target/site/cpd.html" );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-        String str = readFile( new File( getBasedir(), "target/test/unit/empty-report/target/site/cpd.html" ) );
+        File generatedReport = generateReport( "cpd", "empty-report/cpd-empty-report-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
+
+        String str = readFile( generatedReport );
         assertFalse( lowerCaseContains( str, "Hello.java" ) );
         assertTrue( str.contains( "CPD found no problems in your source code." ) );
     }
@@ -294,11 +251,7 @@
         {
             System.setProperty( "file.encoding", "UTF-16" );
 
-            File testPom =
-                new File( getBasedir(),
-                          "src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml" );
-            CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-            mojo.execute();
+            generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
 
             // check if the CPD files were generated
             File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
@@ -315,43 +268,33 @@
     public void testCpdJavascriptConfiguration()
         throws Exception
     {
-        File testPom =
-                new File( getBasedir(), "src/test/resources/unit/default-configuration/cpd-javascript-plugin-config.xml" );
-            CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-            mojo.execute();
+        generateReport( "cpd", "default-configuration/cpd-javascript-plugin-config.xml" );
 
-            // verify  the generated file to exist and violations are reported
-            File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
-            assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-            String str = readFile( generatedFile );
-            assertTrue( lowerCaseContains( str, "Sample.js" ) );
-            assertTrue( lowerCaseContains( str, "SampleDup.js" ) );
+        // verify  the generated file to exist and violations are reported
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        String str = readFile( generatedFile );
+        assertTrue( lowerCaseContains( str, "Sample.js" ) );
+        assertTrue( lowerCaseContains( str, "SampleDup.js" ) );
     }
 
     public void testCpdJspConfiguration()
             throws Exception
     {
-        File testPom =
-                new File( getBasedir(), "src/test/resources/unit/default-configuration/cpd-jsp-plugin-config.xml" );
-            CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-            mojo.execute();
+        generateReport( "cpd", "default-configuration/cpd-jsp-plugin-config.xml" );
 
-            // verify  the generated file to exist and violations are reported
-            File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
-            assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-            String str = readFile( generatedFile );
-            assertTrue( lowerCaseContains( str, "sample.jsp" ) );
-            assertTrue( lowerCaseContains( str, "sampleDup.jsp" ) );
+        // verify  the generated file to exist and violations are reported
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        String str = readFile( generatedFile );
+        assertTrue( lowerCaseContains( str, "sample.jsp" ) );
+        assertTrue( lowerCaseContains( str, "sampleDup.jsp" ) );
     }
 
     public void testExclusionsConfiguration()
             throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml" );
-        final CpdReport mojo = (CpdReport) lookupMojo( "cpd", testPom );
-        mojo.execute();
+        generateReport( "cpd", "default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml" );
 
         // verify  the generated file to exist and no duplications are reported
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/cpd.xml" );
diff --git a/src/test/java/org/apache/maven/plugins/pmd/CpdViolationCheckMojoTest.java b/src/test/java/org/apache/maven/plugins/pmd/CpdViolationCheckMojoTest.java
index b70ae8e..31adb8c 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/CpdViolationCheckMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/CpdViolationCheckMojoTest.java
@@ -26,24 +26,20 @@
  * @version $Id$
  */
 public class CpdViolationCheckMojoTest
-    extends AbstractPmdReportTest
+    extends AbstractPmdReportTestCase
 {
 
     public void testDefaultConfiguration()
         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();
+        generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
 
         // clear the output from previous pmd:cpd execution
         CapturingPrintStream.init( true );
 
         try
         {
-            testPom =
+            File testPom =
                 new File( getBasedir(),
                           "src/test/resources/unit/default-configuration/pmd-check-default-configuration-plugin-config.xml" );
             final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
@@ -65,13 +61,9 @@
         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();
+        generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
 
-        testPom =
+        File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/cpd-check-notfailonviolation-plugin-config.xml" );
         final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
@@ -102,13 +94,9 @@
     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();
+        generateReport( "cpd", "default-configuration/cpd-default-configuration-plugin-config.xml" );
 
-        testPom =
+        File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/cpd-check-cpd-exclusions-configuration-plugin-config.xml" );
         final CpdViolationCheckMojo cpdViolationMojo = (CpdViolationCheckMojo) lookupMojo( "cpd-check", testPom );
diff --git a/src/test/java/org/apache/maven/plugins/pmd/DependencyArtifactStubFactory.java b/src/test/java/org/apache/maven/plugins/pmd/DependencyArtifactStubFactory.java
new file mode 100644
index 0000000..7cd70cd
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugins/pmd/DependencyArtifactStubFactory.java
@@ -0,0 +1,69 @@
+package org.apache.maven.plugins.pmd;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.plugin.testing.ArtifactStubFactory;
+
+public class DependencyArtifactStubFactory
+    extends ArtifactStubFactory
+{
+    private boolean flattenedPath = true;
+
+    public DependencyArtifactStubFactory( File theWorkingDir, boolean theCreateFiles, boolean flattenedPath )
+    {
+        this( theWorkingDir, theCreateFiles );
+        this.flattenedPath = flattenedPath;
+    }
+
+    public DependencyArtifactStubFactory( File theWorkingDir, boolean theCreateFiles )
+    {
+        super( theWorkingDir, theCreateFiles );
+    }
+
+    @Override
+    public Artifact createArtifact( String groupId, String artifactId, VersionRange versionRange, String scope,
+                                    String type, String classifier, boolean optional )
+        throws IOException
+    {
+        File workingDir = getWorkingDir();
+
+        if ( !flattenedPath )
+        {
+            // don't use flatten directories, won't happen at runtime
+            String path = groupId.replace( '.', '/' ) + '/' +
+                    artifactId + '/' +
+                    ArtifactUtils.toSnapshotVersion( versionRange.getRecommendedVersion().toString() );
+            setWorkingDir( new File( workingDir, path ) );
+        }
+
+        Artifact artifact =
+            super.createArtifact( groupId, artifactId, versionRange, scope, type, classifier, optional );
+
+        setWorkingDir( workingDir );
+
+        return artifact;
+    }
+}
diff --git a/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java b/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
index c8ddae3..d53ba48 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
@@ -44,7 +44,7 @@
  * @version $Id$
  */
 public class PmdReportTest
-    extends AbstractPmdReportTest
+    extends AbstractPmdReportTestCase
 {
 
     /**
@@ -66,11 +66,8 @@
                                                     "src/test/resources/unit/default-configuration/jxr-files" ),
                                           new File( getBasedir(), "target/test/unit/default-configuration/target/site" ) );
 
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -80,12 +77,8 @@
         generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/maven-pmd-plugin-default.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check if there's a link to the JXR files
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
 
         assertTrue( str.contains( "/xref/def/configuration/App.html#L31" ) );
 
@@ -123,17 +116,10 @@
                                                     "src/test/resources/unit/default-configuration/jxr-files" ),
                                           new File( getBasedir(), "target/test/unit/default-configuration/target/site" ) );
 
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
 
         // check that there's no priority column
         assertFalse( str.contains( "<th>Priority</th>" ) );
@@ -141,30 +127,23 @@
 
     public void testDefaultConfigurationNoRenderViolationsByPriority()
             throws Exception
-        {
-            FileUtils.copyDirectoryStructure( new File( getBasedir(),
-                                                        "src/test/resources/unit/default-configuration/jxr-files" ),
-                                              new File( getBasedir(), "target/test/unit/default-configuration/target/site" ) );
+    {
+        FileUtils.copyDirectoryStructure( new File( getBasedir(),
+                                                    "src/test/resources/unit/default-configuration/jxr-files" ),
+                                          new File( getBasedir(), "target/test/unit/default-configuration/target/site" ) );
 
-            File testPom =
-                new File( getBasedir(),
-                          "src/test/resources/unit/default-configuration/pmd-report-no-render-violations-by-priority.xml" );
-            PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-            mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-report-no-render-violations-by-priority.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-            File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-            renderer( mojo, generatedFile );
-            assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        String str = readFile( generatedReport );
 
-            String str = readFile( generatedFile );
-
-            // there should be no section Violations By Priority
-            assertFalse( str.contains( "Violations By Priority</h2>" ) );
-            assertFalse( str.contains( "Priority 3</h3>" ) );
-            assertFalse( str.contains( "Priority 4</h3>" ) );
-            // the file App.java is mentioned once: in the files section
-            assertEquals( 1, StringUtils.countMatches( str, "def/configuration/App.java" ) );
-        }
+        // there should be no section Violations By Priority
+        assertFalse( str.contains( "Violations By Priority</h2>" ) );
+        assertFalse( str.contains( "Priority 3</h3>" ) );
+        assertFalse( str.contains( "Priority 4</h3>" ) );
+        // the file App.java is mentioned once: in the files section
+        assertEquals( 1, StringUtils.countMatches( str, "def/configuration/App.java" ) );
+    }
 
 
     public void testDefaultConfigurationWithAnalysisCache()
@@ -174,11 +153,7 @@
                                                     "src/test/resources/unit/default-configuration/jxr-files" ),
                                           new File( getBasedir(), "target/test/unit/pmd-with-analysis-cache-plugin-config/target/site" ) );
 
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/pmd-with-analysis-cache-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        generateReport( "pmd", "default-configuration/pmd-with-analysis-cache-plugin-config.xml" );
 
         // check if the PMD analysis cache file has been generated
         File cacheFile = new File( getBasedir(), "target/test/unit/pmd-with-analysis-cache-plugin-config/target/pmd/pmd.cache" );
@@ -188,11 +163,8 @@
     public void testJavascriptConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/javascript-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -208,11 +180,7 @@
         generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/errorprone.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
         assertTrue( str.contains( "Avoid using global variables" ) );
     }
 
@@ -226,7 +194,7 @@
         File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        PmdReport mojo = (PmdReport) createReportMojo( "pmd", testPom );
 
         // Additional test case for MPMD-174 (https://issues.apache.org/jira/browse/MPMD-174).
         int port = determineFreePort();
@@ -257,7 +225,8 @@
         URL url3 = getClass().getClassLoader().getResource( "rulesets/java/imports.xml" );
         mojo.setRulesets( new String[] { url.toString(), url2.toString(), url3.toString(), sonarExportRulesetUrl } );
 
-        mojo.execute();
+        File generatedReport = generateReport( mojo, testPom );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -278,12 +247,8 @@
                       "target/test/unit/default-configuration/target/pmd/rulesets/export_format_pmd_language_java_name_Sonar_2520way.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check if there's a link to the JXR files
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
 
         assertTrue( str.contains( "/xref/def/configuration/App.html#L31" ) );
 
@@ -309,12 +274,8 @@
     public void testCustomConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/custom-configuration/custom-configuration-plugin-config.xml" );
-
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "custom-configuration/custom-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check the generated files
         File generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/pmd.csv" );
@@ -323,12 +284,8 @@
         generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/pmd/rulesets/custom.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check if custom ruleset was applied
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
 
         // codestyle.xml/ControlStatementBraces:
         assertTrue( lowerCaseContains( str, "This statement should have braces" ) );
@@ -353,9 +310,8 @@
     public void testSkipConfiguration()
         throws Exception
     {
-        File testPom = new File( getBasedir(), "src/test/resources/unit/custom-configuration/skip-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "custom-configuration/skip-plugin-config.xml" );
+        assertFalse( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // verify the generated files do not exist because PMD was skipped
         File generatedFile = new File( getBasedir(), "target/test/unit/skip-configuration/target/pmd.csv" );
@@ -364,9 +320,6 @@
         generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/custom.xml" );
         assertFalse( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/custom-configuration/target/site/pmd.html" );
-        assertFalse( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // the fact, the PMD execution has been skipped, should be logged
         String output = CapturingPrintStream.getOutput();
         assertTrue ( output.contains( "Skipping PMD execution" ) );
@@ -375,27 +328,19 @@
     public void testSkipEmptyReportConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(), "src/test/resources/unit/empty-report/skip-empty-report-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
-
         // verify the generated files do not exist because PMD was skipped
-        File generatedFile = new File( getBasedir(), "target/test/unit/empty-report/target/site/pmd.html" );
-        assertFalse( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        File generatedReport = generateReport( "pmd", "empty-report/skip-empty-report-plugin-config.xml" );
+        assertFalse( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
     }
 
     public void testEmptyReportConfiguration()
         throws Exception
     {
-        File testPom = new File( getBasedir(), "src/test/resources/unit/empty-report/empty-report-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "empty-report/empty-report-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // verify the generated files do exist, even if there are no violations
-        File generatedFile = new File( getBasedir(), "target/test/unit/empty-report/target/site/pmd.html" );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
         assertFalse( lowerCaseContains( str, "Hello.java" ) );
         assertEquals( 1, StringUtils.countMatches( str, "PMD found no problems in your source code." ) );
         // no sections files or violations by priority
@@ -409,10 +354,10 @@
         try
         {
             File testPom =
-                new File( getBasedir(), "src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml" );
-            PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-            setVariableValueToObject( mojo, "compileSourceRoots", mojo.project.getCompileSourceRoots() );
-            mojo.executeReport( Locale.ENGLISH );
+                    new File( getBasedir(), "src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml" );
+            AbstractPmdReport mojo = createReportMojo( "pmd", testPom );
+            setVariableValueToObject( mojo, "compileSourceRoots", mojo.getProject().getCompileSourceRoots() );
+            generateReport( mojo, testPom );
 
             fail( "Must throw MavenReportException." );
         }
@@ -427,10 +372,7 @@
     {
         try
         {
-            File testPom =
-                new File( getBasedir(), "src/test/resources/unit/invalid-format/invalid-target-jdk-plugin-config.xml" );
-            PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-            mojo.execute();
+            generateReport( "pmd", "empty-report/invalid-format/invalid-target-jdk-plugin-config.xml" );
 
             fail( "Must throw MavenReportException." );
         }
@@ -447,12 +389,9 @@
     public void testIncludeXmlInSite()
             throws Exception
     {
-        File testPom = new File( getBasedir(), "src/test/resources/unit/default-configuration/pmd-report-include-xml-in-site-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-report-include-xml-in-site-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
         // verify the pmd file is included in site
         File generatedXmlFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.xml" );
         assertTrue( FileUtils.fileExists( generatedXmlFile.getAbsolutePath() ) );
@@ -517,11 +456,8 @@
     public void testSuppressMarkerConfiguration()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/pmd-with-suppressMarker-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-with-suppressMarker-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -534,12 +470,8 @@
         // but it appears as suppressed
         assertTrue( str.contains( "suppressiontype=\"nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\"" ));
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check if there's a link to the JXR files
-        str = readFile( generatedFile );
+        str = readFile( generatedReport );
 
         assertTrue( str.contains( "/xref/def/configuration/AppSample.html#L27" ) );
         // suppressed violation
@@ -549,11 +481,8 @@
     public void testSuppressMarkerConfigurationWithoutRendering()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -566,12 +495,8 @@
         // but it appears as suppressed
         assertTrue( str.contains( "suppressiontype=\"nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\"" ));
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
         // check if there's a link to the JXR files
-        str = readFile( generatedFile );
+        str = readFile( generatedReport );
 
         assertTrue( str.contains( "/xref/def/configuration/AppSample.html#L27" ) );
         // suppressed violations are not rendered
@@ -579,12 +504,10 @@
     }
 
     public void testJspConfiguration()
-            throws Exception
+        throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/default-configuration/jsp-configuration-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/jsp-configuration-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
         // check if the PMD files were generated
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
@@ -606,24 +529,17 @@
         generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/security.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
         assertTrue(str.contains("JSP file should use UTF-8 encoding"));
         assertTrue(str.contains("Using unsanitized JSP expression can lead to Cross Site Scripting (XSS) attacks"));
         assertTrue(str.contains("Avoid having style information in JSP files."));
     }
 
     public void testPMDProcessingError()
-            throws Exception
+        throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/processing-error/pmd-processing-error-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
         try {
-            mojo.execute();
+            generateReport( "pmd", "processing-error/pmd-processing-error-plugin-config.xml" );
             fail("Expected exception");
         } catch (RuntimeException e) {
             assertTrue( e.getMessage().endsWith( "Found 1 PMD processing errors" ) );
@@ -631,13 +547,11 @@
     }
 
     public void testPMDProcessingErrorWithDetailsSkipped()
-            throws Exception
+        throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/processing-error/pmd-processing-error-skip-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        File generatedReport = generateReport( "pmd", "processing-error/pmd-processing-error-skip-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-        mojo.execute();
         String output = CapturingPrintStream.getOutput();
         assertTrue ( output.contains( "There are 1 PMD processing errors:" ) );
 
@@ -648,22 +562,17 @@
         // The parse exception must be in the XML report
         assertTrue( str.contains( "ParseException: Encountered \"\" at line 23, column 5." ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-        str = readFile( generatedFile );
+        str = readFile( generatedReport );
         // The parse exception must also be in the HTML report
         assertTrue( str.contains( "ParseException: Encountered \"\" at line 23, column 5." ) );
     }
 
     public void testPMDProcessingErrorWithDetailsNoReport()
-            throws Exception
+        throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/processing-error/pmd-processing-error-no-report-plugin-config.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        File generatedReport = generateReport( "pmd", "processing-error/pmd-processing-error-no-report-plugin-config.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-        mojo.execute();
         String output = CapturingPrintStream.getOutput();
         assertTrue ( output.contains( "There are 1 PMD processing errors:" ) );
 
@@ -674,43 +583,36 @@
         // The parse exception must be in the XML report
         assertTrue( str.contains( "ParseException: Encountered \"\" at line 23, column 5." ) );
 
-        generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-        str = readFile( generatedFile );
+        str = readFile( generatedReport );
         // The parse exception must NOT be in the HTML report, since reportProcessingErrors is false
         assertFalse( str.contains( "ParseException: Encountered \"\" at line 23, column 5." ) );
     }
 
-    public void testPMDExcludeRootsShouldExcludeSubdirectories() throws Exception {
-        File testPom = new File(getBasedir(), "src/test/resources/unit/exclude-roots/pmd-exclude-roots-plugin-config.xml");
-        PmdReport mojo = (PmdReport) lookupMojo ("pmd", testPom);
-        mojo.execute();
+    public void testPMDExcludeRootsShouldExcludeSubdirectories()
+        throws Exception
+    {
+        generateReport( "pmd", "exclude-roots/pmd-exclude-roots-plugin-config.xml" );
 
         File generatedFile = new File( getBasedir(), "target/test/unit/exclude-roots/target/pmd.xml" );
         assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
         String str = readFile( generatedFile );
 
-        assertTrue( "Seems like all directories are excluded now", str.contains("ForLoopShouldBeWhileLoop") );
+        assertTrue( "Seems like all directories are excluded now", str.contains( "ForLoopShouldBeWhileLoop" ) );
         assertFalse( "Exclusion of an exact source directory not working", str.contains( "OverrideBothEqualsAndHashcode" ) );
         assertFalse( "Exclusion of basedirectory with subdirectories not working (MPMD-178)", str.contains( "JumbledIncrementer") );
     }
 
     public void testViolationExclusion()
-            throws Exception
-        {
-            File testPom =
-                new File( getBasedir(),
-                          "src/test/resources/unit/default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml" );
-            final PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-            mojo.execute();
+        throws Exception
+    {
+        generateReport( "pmd", "default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml" );
 
-            File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
-            assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-            String str = readFile( generatedFile );
+        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd.xml" );
+        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
+        String str = readFile( generatedFile );
 
-            assertEquals(0, StringUtils.countMatches(str, "<violation"));
-        }
+        assertEquals(0, StringUtils.countMatches(str, "<violation"));
+    }
 
     public void testCustomRenderer() throws MavenReportException
     {
@@ -731,17 +633,10 @@
                                                     "src/test/resources/unit/default-configuration/jxr-files" ),
                                           new File( getBasedir(), "target/test/unit/default-configuration/target/site" ) );
 
-        File testPom =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/pmd-report-custom-rules.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
-        mojo.execute();
+        File generatedReport = generateReport( "pmd", "default-configuration/pmd-report-custom-rules.xml" );
+        assertTrue( FileUtils.fileExists( generatedReport.getAbsolutePath() ) );
 
-        File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/site/pmd.html" );
-        renderer( mojo, generatedFile );
-        assertTrue( FileUtils.fileExists( generatedFile.getAbsolutePath() ) );
-
-        String str = readFile( generatedFile );
+        String str = readFile( generatedReport );
 
         // custom rule without link
         assertEquals( 2, StringUtils.countMatches( str, "<td>CustomRule</td>" ) );
@@ -785,11 +680,11 @@
         File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/pmd-report-resolve-rulesets.xml" );
-        PmdReport mojo = (PmdReport) lookupMojo( "pmd", testPom );
+        PmdReport mojo = (PmdReport) createReportMojo( "pmd", testPom );
         mojo.rulesets[3] = sonarExportRulesetUrl;
         mojo.rulesets[4] = myRulesetUrl;
         mojo.rulesets[5] = notAInternalRulesetUrl;
-        mojo.execute();
+        generateReport( mojo, testPom );
 
         // these are the rulesets, that have been copied to target/pmd/rulesets
         File generatedFile = new File( getBasedir(), "target/test/unit/default-configuration/target/pmd/rulesets/custom-rules.xml" );
diff --git a/src/test/java/org/apache/maven/plugins/pmd/PmdViolationCheckMojoTest.java b/src/test/java/org/apache/maven/plugins/pmd/PmdViolationCheckMojoTest.java
index d581581..e97fc8a 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/PmdViolationCheckMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/PmdViolationCheckMojoTest.java
@@ -28,17 +28,13 @@
  * @version $Id$
  */
 public class PmdViolationCheckMojoTest
-    extends AbstractPmdReportTest
+    extends AbstractPmdReportTestCase
 {
 
     public void testDefaultConfiguration()
         throws Exception
     {
-        File testPomPmd =
-            new File( getBasedir(),
-                      "src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
-        final PmdReport pmdMojo = (PmdReport) lookupMojo( "pmd", testPomPmd );
-        pmdMojo.execute();
+        generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
 
         // clear the output from previous pmd:pmd execution
         CapturingPrintStream.init( true );
@@ -66,13 +62,9 @@
     public void testNotFailOnViolation()
         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();
+        generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
 
-        testPom =
+        File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/pmd-check-notfailonviolation-plugin-config.xml" );
         final PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
@@ -84,13 +76,9 @@
     public void testMaxAllowedViolations()
         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();
+        generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
 
-        testPom =
+        File testPom =
             new File( getBasedir(),
                 "src/test/resources/unit/default-configuration/pmd-check-notfailmaxviolation-plugin-config.xml" );
         final PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
@@ -125,13 +113,9 @@
     public void testFailurePriority()
         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();
+        generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
 
-        testPom =
+        File testPom =
             new File( getBasedir(),
                       "src/test/resources/unit/default-configuration/pmd-check-failonpriority-plugin-config.xml" );
         PmdViolationCheckMojo pmdViolationMojo = (PmdViolationCheckMojo) lookupMojo( "check", testPom );
@@ -185,13 +169,9 @@
     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();
+        generateReport( "pmd", "default-configuration/default-configuration-plugin-config.xml" );
 
-        testPom =
+        File 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 );
diff --git a/src/test/java/org/apache/maven/plugins/pmd/stubs/CustomConfigurationMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pmd/stubs/CustomConfigurationMavenProjectStub.java
index 9003350..4fe1d67 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/stubs/CustomConfigurationMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/stubs/CustomConfigurationMavenProjectStub.java
@@ -30,14 +30,13 @@
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.Scm;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @version $Id$
  */
 public class CustomConfigurationMavenProjectStub
-    extends MavenProjectStub
+    extends PmdProjectStub
 {
     private Build build;
 
diff --git a/src/test/java/org/apache/maven/plugins/pmd/stubs/DefaultConfigurationMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pmd/stubs/DefaultConfigurationMavenProjectStub.java
index 3093e14..daac795 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/stubs/DefaultConfigurationMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/stubs/DefaultConfigurationMavenProjectStub.java
@@ -30,14 +30,13 @@
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.Scm;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @version $Id$
  */
 public class DefaultConfigurationMavenProjectStub
-    extends MavenProjectStub
+    extends PmdProjectStub
 {
     private List<ReportPlugin> reportPlugins = new ArrayList<>();
 
diff --git a/src/test/java/org/apache/maven/plugins/pmd/stubs/InvalidFormatMavenProjectStub.java b/src/test/java/org/apache/maven/plugins/pmd/stubs/InvalidFormatMavenProjectStub.java
index 293ecf9..f700313 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/stubs/InvalidFormatMavenProjectStub.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/stubs/InvalidFormatMavenProjectStub.java
@@ -29,14 +29,13 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Scm;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @version $Id$
  */
 public class InvalidFormatMavenProjectStub
-    extends MavenProjectStub
+    extends PmdProjectStub
 {
     private Build build;
 
diff --git a/src/test/java/org/apache/maven/plugins/pmd/stubs/PmdProjectStub.java b/src/test/java/org/apache/maven/plugins/pmd/stubs/PmdProjectStub.java
new file mode 100644
index 0000000..0b8f6f9
--- /dev/null
+++ b/src/test/java/org/apache/maven/plugins/pmd/stubs/PmdProjectStub.java
@@ -0,0 +1,42 @@
+package org.apache.maven.plugins.pmd.stubs;
+
+/*
+ * 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.
+ */
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+
+public abstract class PmdProjectStub
+    extends MavenProjectStub
+{
+    @Override
+    public List<ArtifactRepository> getRemoteArtifactRepositories()
+    {
+        ArtifactRepository repository = new MavenArtifactRepository( "central", "https://repo1.maven.org/maven2",
+                                                                       new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(), new ArtifactRepositoryPolicy() );
+
+        return Collections.singletonList( repository );
+    }
+}
diff --git a/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml b/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
index e963134..3595589 100644
--- a/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
+++ b/src/test/resources/unit/custom-configuration/cpd-custom-configuration-plugin-config.xml
@@ -36,6 +36,7 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/custom-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>csv</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/custom-configuration/target/site/xref</xrefLocation>
@@ -46,7 +47,7 @@
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/custom-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/custom-configuration/cpd-txt-format-configuration-plugin-config.xml b/src/test/resources/unit/custom-configuration/cpd-txt-format-configuration-plugin-config.xml
index 5ea5415..eb7d1fe 100644
--- a/src/test/resources/unit/custom-configuration/cpd-txt-format-configuration-plugin-config.xml
+++ b/src/test/resources/unit/custom-configuration/cpd-txt-format-configuration-plugin-config.xml
@@ -36,14 +36,14 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/custom-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>txt</format>
           <linkXRef>false</linkXRef>
           <minimumTokens>30</minimumTokens>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/custom-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/custom-configuration/custom-configuration-plugin-config.xml b/src/test/resources/unit/custom-configuration/custom-configuration-plugin-config.xml
index b99ab01..8cfd6ef 100644
--- a/src/test/resources/unit/custom-configuration/custom-configuration-plugin-config.xml
+++ b/src/test/resources/unit/custom-configuration/custom-configuration-plugin-config.xml
@@ -36,17 +36,18 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/custom-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/custom-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>csv</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/custom-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>ISO-8859-1</sourceEncoding>
+          <inputEncoding>ISO-8859-1</inputEncoding>
           <rulesets>
             <ruleset>rulesets/java/maven-pmd-plugin-default.xml</ruleset>
             <ruleset>${basedir}/src/test/resources/unit/custom-configuration/resources/rulesets/custom.xml</ruleset>
           </rulesets>
           <targetJdk>1.4</targetJdk>
-          <minimumPriority>4</minimumPriority>          
+          <minimumPriority>4</minimumPriority>
           <excludes>
             <exclude>**/Sample.java</exclude>
             <exclude>**/AnotherSample.java</exclude>
@@ -54,7 +55,6 @@
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/custom-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
         </configuration>
         <dependencies>
           <dependency>
diff --git a/src/test/resources/unit/custom-configuration/skip-plugin-config.xml b/src/test/resources/unit/custom-configuration/skip-plugin-config.xml
index 0705d31..6f6f159 100644
--- a/src/test/resources/unit/custom-configuration/skip-plugin-config.xml
+++ b/src/test/resources/unit/custom-configuration/skip-plugin-config.xml
@@ -40,9 +40,9 @@
           <format>csv</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/skip-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>ISO-8859-1</sourceEncoding>
+          <inputEncoding>ISO-8859-1</inputEncoding>
           <targetJdk>1.4</targetJdk>
-          <minimumPriority>4</minimumPriority>          
+          <minimumPriority>4</minimumPriority>
           <skip>true</skip>
         </configuration>
         <dependencies>
diff --git a/src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml
index 4df189f..e57fe5d 100644
--- a/src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-default-configuration-plugin-config.xml
@@ -36,15 +36,15 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>xml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
           <minimumTokens>100</minimumTokens>
-          
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/default-configuration/cpd-encoding-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-encoding-configuration-plugin-config.xml
index ae0d780..66b4532 100644
--- a/src/test/resources/unit/default-configuration/cpd-encoding-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-encoding-configuration-plugin-config.xml
@@ -40,12 +40,10 @@
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
           <minimumTokens>100</minimumTokens>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/default-configuration/cpd-javascript-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-javascript-plugin-config.xml
index 3d7ad68..f7e045a 100644
--- a/src/test/resources/unit/default-configuration/cpd-javascript-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-javascript-plugin-config.xml
@@ -35,6 +35,7 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>xml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
@@ -43,11 +44,10 @@
           <includes>
             <include>**/*.js</include>
           </includes>
-          
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/default-configuration/cpd-jsp-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-jsp-plugin-config.xml
index 27ce220..6ad62d0 100644
--- a/src/test/resources/unit/default-configuration/cpd-jsp-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-jsp-plugin-config.xml
@@ -35,6 +35,7 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>xml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
@@ -43,11 +44,10 @@
           <includes>
             <include>**/*.jsp</include>
           </includes>
-          
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml
index 83a5d45..85ea191 100644
--- a/src/test/resources/unit/default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-report-cpd-exclusions-configuration-plugin-config.xml
@@ -36,15 +36,15 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>xml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
           <minimumTokens>100</minimumTokens>
-          
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <excludeFromFailureFile>${basedir}/src/test/resources/unit/excludes/my-exclude-cpd.properties</excludeFromFailureFile>
         </configuration>
       </plugin>
diff --git a/src/test/resources/unit/default-configuration/cpd-report-include-xml-in-site-plugin-config.xml b/src/test/resources/unit/default-configuration/cpd-report-include-xml-in-site-plugin-config.xml
index cccb881..7920f0a 100644
--- a/src/test/resources/unit/default-configuration/cpd-report-include-xml-in-site-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/cpd-report-include-xml-in-site-plugin-config.xml
@@ -36,15 +36,15 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <format>xml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
           <minimumTokens>100</minimumTokens>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <includeXmlInSite>true</includeXmlInSite>
           <format>xml</format>
         </configuration>
diff --git a/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
index f476e09..36e22ec 100644
--- a/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
@@ -36,12 +36,12 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
-          
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
index a9f7c56..2445754 100644
--- a/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/javascript-configuration-plugin-config.xml
@@ -36,9 +36,10 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <language>javascript</language>
           <rulesets>
             <ruleset>/category/ecmascript/bestpractices.xml</ruleset>
diff --git a/src/test/resources/unit/default-configuration/jsp-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/jsp-configuration-plugin-config.xml
index 53b026a..0de5159 100644
--- a/src/test/resources/unit/default-configuration/jsp-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/jsp-configuration-plugin-config.xml
@@ -36,9 +36,10 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <language>jsp</language>
           <rulesets>
             <ruleset>/category/jsp/bestpractices.xml</ruleset>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-custom-rules.xml b/src/test/resources/unit/default-configuration/pmd-report-custom-rules.xml
index 04c2c55..b5f9c4d 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-custom-rules.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-custom-rules.xml
@@ -36,6 +36,7 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <rulesets>
             <ruleset>${basedir}/src/test/resources/unit/default-configuration/rulesets/custom-rules.xml</ruleset>
@@ -43,7 +44,7 @@
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-include-xml-in-site-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-report-include-xml-in-site-plugin-config.xml
index 1963d89..e62b70c 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-include-xml-in-site-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-include-xml-in-site-plugin-config.xml
@@ -36,11 +36,11 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <includeXmlInSite>true</includeXmlInSite>
-
         </configuration>
         <dependencies>
           <dependency>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-no-render-violations-by-priority.xml b/src/test/resources/unit/default-configuration/pmd-report-no-render-violations-by-priority.xml
index e224833..a9db808 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-no-render-violations-by-priority.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-no-render-violations-by-priority.xml
@@ -36,15 +36,15 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-
           <renderViolationsByPriority>false</renderViolationsByPriority>
         </configuration>
         <dependencies>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml
index 002ee55..f2633ce 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-not-render-rule-priority-plugin-config.xml
@@ -36,16 +36,15 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
-          
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
-
           <renderRuleViolationPriority>false</renderRuleViolationPriority>
         </configuration>
         <dependencies>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml
index 3071f8e..246d495 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-pmd-exclusions-configuration-plugin-config.xml
@@ -36,12 +36,12 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
-          
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/pmd-report-resolve-rulesets.xml b/src/test/resources/unit/default-configuration/pmd-report-resolve-rulesets.xml
index 351ef8e..a36a855 100644
--- a/src/test/resources/unit/default-configuration/pmd-report-resolve-rulesets.xml
+++ b/src/test/resources/unit/default-configuration/pmd-report-resolve-rulesets.xml
@@ -36,6 +36,7 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <rulesets>
             <ruleset>${basedir}/src/test/resources/unit/default-configuration/rulesets/custom-rules.xml</ruleset>
@@ -49,7 +50,7 @@
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/pmd-with-analysis-cache-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-with-analysis-cache-plugin-config.xml
index 142bc62..df2c0f1 100644
--- a/src/test/resources/unit/default-configuration/pmd-with-analysis-cache-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-with-analysis-cache-plugin-config.xml
@@ -36,14 +36,14 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/pmd-with-analysis-cache-plugin-config/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/pmd-with-analysis-cache-plugin-config/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/pmd-with-analysis-cache-plugin-config/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/pmd-with-analysis-cache-plugin-config/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <analysisCache>true</analysisCache>
           <analysisCacheLocation>${basedir}/target/test/unit/pmd-with-analysis-cache-plugin-config/target/pmd/pmd.cache</analysisCacheLocation>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml
index 1f94bf2..9ed6257 100644
--- a/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-no-render-plugin-config.xml
@@ -36,15 +36,14 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
-
+          <inputEncoding>UTF-8</inputEncoding>
           <suppressMarker>SUPPRESSME</suppressMarker>
           <renderSuppressedViolations>false</renderSuppressedViolations>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-plugin-config.xml b/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-plugin-config.xml
index 88d8a93..c5116dd 100644
--- a/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-plugin-config.xml
+++ b/src/test/resources/unit/default-configuration/pmd-with-suppressMarker-plugin-config.xml
@@ -36,14 +36,13 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/default-configuration/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/default-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>UTF-8</sourceEncoding>
-
+          <inputEncoding>UTF-8</inputEncoding>
           <suppressMarker>SUPPRESSME</suppressMarker>
-
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/empty-report/cpd-empty-report-plugin-config.xml b/src/test/resources/unit/empty-report/cpd-empty-report-plugin-config.xml
index 6db1139..be2b534 100644
--- a/src/test/resources/unit/empty-report/cpd-empty-report-plugin-config.xml
+++ b/src/test/resources/unit/empty-report/cpd-empty-report-plugin-config.xml
@@ -36,10 +36,11 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/empty-report/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/empty-report/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/empty-report/java/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <minimumTokens>100</minimumTokens>
         </configuration>
         <dependencies>
diff --git a/src/test/resources/unit/empty-report/cpd-skip-empty-report-plugin-config.xml b/src/test/resources/unit/empty-report/cpd-skip-empty-report-plugin-config.xml
index 93f4887..9109cda 100644
--- a/src/test/resources/unit/empty-report/cpd-skip-empty-report-plugin-config.xml
+++ b/src/test/resources/unit/empty-report/cpd-skip-empty-report-plugin-config.xml
@@ -39,7 +39,7 @@
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/empty-report/java/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <minimumTokens>100</minimumTokens>
           <skipEmptyReport>true</skipEmptyReport>
         </configuration>
diff --git a/src/test/resources/unit/empty-report/empty-report-plugin-config.xml b/src/test/resources/unit/empty-report/empty-report-plugin-config.xml
index 56e3bc1..c1c6ea8 100644
--- a/src/test/resources/unit/empty-report/empty-report-plugin-config.xml
+++ b/src/test/resources/unit/empty-report/empty-report-plugin-config.xml
@@ -36,11 +36,12 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/empty-report/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/empty-report/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/empty-report/target/pmd/rulesets</rulesetsTargetDirectory>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/empty-report/java/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
         </configuration>
         <dependencies>
           <dependency>
diff --git a/src/test/resources/unit/empty-report/skip-empty-report-plugin-config.xml b/src/test/resources/unit/empty-report/skip-empty-report-plugin-config.xml
index 41e1aef..2aeff05 100644
--- a/src/test/resources/unit/empty-report/skip-empty-report-plugin-config.xml
+++ b/src/test/resources/unit/empty-report/skip-empty-report-plugin-config.xml
@@ -40,7 +40,7 @@
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/empty-report/java/</compileSourceRoot>
           </compileSourceRoots>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <skipEmptyReport>true</skipEmptyReport>
         </configuration>
         <dependencies>
diff --git a/src/test/resources/unit/exclude-roots/pmd-exclude-roots-plugin-config.xml b/src/test/resources/unit/exclude-roots/pmd-exclude-roots-plugin-config.xml
index 9435974..ac800c7 100644
--- a/src/test/resources/unit/exclude-roots/pmd-exclude-roots-plugin-config.xml
+++ b/src/test/resources/unit/exclude-roots/pmd-exclude-roots-plugin-config.xml
@@ -36,17 +36,16 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/exclude-roots/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/exclude-roots/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/exclude-roots/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
-
+          <inputEncoding>UTF-8</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/src</compileSourceRoot>
             <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot/src1</compileSourceRoot>
             <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot/src2</compileSourceRoot>
             <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/othersrc</compileSourceRoot>
           </compileSourceRoots>
-
           <excludeRoots>
             <excludeRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot</excludeRoot>
             <excludeRoot>${basedir}/src/test/resources/unit/exclude-roots/othersrc</excludeRoot>
diff --git a/src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml b/src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml
index 9d5958a..e6ccad4 100644
--- a/src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml
+++ b/src/test/resources/unit/invalid-format/invalid-format-plugin-config.xml
@@ -40,7 +40,7 @@
           <format>xhtml</format>
           <linkXRef>false</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/invalid-format/target/site/xref</xrefLocation>
-          <sourceEncoding>ISO-8859-1</sourceEncoding>
+          <inputEncoding>ISO-8859-1</inputEncoding>
         </configuration>
       </plugin>
     </plugins>
diff --git a/src/test/resources/unit/invalid-format/invalid-target-jdk-plugin-config.xml b/src/test/resources/unit/invalid-format/invalid-target-jdk-plugin-config.xml
index 30dc635..39f78a7 100644
--- a/src/test/resources/unit/invalid-format/invalid-target-jdk-plugin-config.xml
+++ b/src/test/resources/unit/invalid-format/invalid-target-jdk-plugin-config.xml
@@ -41,8 +41,7 @@
           <targetJdk>1.x</targetJdk>
           <linkXRef>true</linkXRef>
           <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
-          <sourceEncoding>ISO-8859-1</sourceEncoding>
-          
+          <inputEncoding>ISO-8859-1</inputEncoding>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
           </compileSourceRoots>
diff --git a/src/test/resources/unit/processing-error/pmd-processing-error-no-report-plugin-config.xml b/src/test/resources/unit/processing-error/pmd-processing-error-no-report-plugin-config.xml
index 7db20a1..ba7f86f 100644
--- a/src/test/resources/unit/processing-error/pmd-processing-error-no-report-plugin-config.xml
+++ b/src/test/resources/unit/processing-error/pmd-processing-error-no-report-plugin-config.xml
@@ -36,9 +36,10 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/parse-error/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/parse-error/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/parse-error/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <skipPmdError>true</skipPmdError>
           <renderProcessingErrors>false</renderProcessingErrors>
           <compileSourceRoots>
diff --git a/src/test/resources/unit/processing-error/pmd-processing-error-plugin-config.xml b/src/test/resources/unit/processing-error/pmd-processing-error-plugin-config.xml
index 0a2a10e..f08cee4 100644
--- a/src/test/resources/unit/processing-error/pmd-processing-error-plugin-config.xml
+++ b/src/test/resources/unit/processing-error/pmd-processing-error-plugin-config.xml
@@ -38,7 +38,7 @@
           <targetDirectory>${basedir}/target/test/unit/parse-error/target</targetDirectory>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/parse-error/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <skipPmdError>false</skipPmdError>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/processing-error/src</compileSourceRoot>
diff --git a/src/test/resources/unit/processing-error/pmd-processing-error-skip-plugin-config.xml b/src/test/resources/unit/processing-error/pmd-processing-error-skip-plugin-config.xml
index 9974a8f..686d705 100644
--- a/src/test/resources/unit/processing-error/pmd-processing-error-skip-plugin-config.xml
+++ b/src/test/resources/unit/processing-error/pmd-processing-error-skip-plugin-config.xml
@@ -36,9 +36,10 @@
           <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/parse-error/target/site</outputDirectory>
           <targetDirectory>${basedir}/target/test/unit/parse-error/target</targetDirectory>
+          <localRepository>${localRepository}</localRepository>
           <rulesetsTargetDirectory>${basedir}/target/test/unit/parse-error/target/pmd/rulesets</rulesetsTargetDirectory>
           <format>xml</format>
-          <sourceEncoding>UTF-8</sourceEncoding>
+          <inputEncoding>UTF-8</inputEncoding>
           <skipPmdError>true</skipPmdError>
           <compileSourceRoots>
             <compileSourceRoot>${basedir}/src/test/resources/unit/processing-error/src</compileSourceRoot>