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>
