From 8ba91c7920eaf8aa0a97220a9120dede9305c6b1 Mon Sep 17 00:00:00 2001
From: Michael Osipov <michaelo@apache.org>
Date: Fri, 2 Dec 2022 22:50:59 +0100
Subject: [PATCH] [JXR-188] Upgrade to Doxia 2.0.0 Milestone Stack

This closes #64
---
 maven-jxr-plugin/pom.xml                      | 39 ++++-----
 .../it/JXR-100_parameterlink/verify.groovy    |  6 +-
 .../maven/plugin/jxr/AbstractJxrReport.java   | 80 +++++++++----------
 .../maven/plugin/jxr/JxrNoForkReport.java     |  2 +-
 .../apache/maven/plugin/jxr/JxrReport.java    | 30 ++-----
 .../maven/plugin/jxr/JxrTestNoForkReport.java |  2 +-
 .../maven/plugin/jxr/JxrTestReport.java       | 30 ++-----
 .../maven/plugin/jxr/AbstractJxrTestCase.java | 35 +++++++-
 .../maven/plugin/jxr/JxrReportTest.java       | 50 +++++++-----
 .../maven/plugin/jxr/JxrTestReportTest.java   |  7 +-
 .../stubs/AggregateTestMavenProjectStub.java  | 25 ++++--
 .../DefaultConfigurationMavenProjectStub.java | 25 ++++--
 .../ExcludeConfigurationMavenProjectStub.java | 22 +++--
 .../IncludeConfigurationMavenProjectStub.java | 22 +++--
 .../plugin/jxr/stubs/JxrProjectStub.java      | 23 ++++++
 .../stubs/NoJavadocDirMavenProjectStub.java   | 22 +++--
 ...adocLinkConfigurationMavenProjectStub.java | 28 ++++---
 .../plugin/jxr/stubs/PomMavenProjectStub.java | 32 ++++----
 .../stubs/TestSourceDirMavenProjectStub.java  | 22 +++--
 .../aggregate-test-plugin-config.xml          |  2 -
 .../default-configuration-plugin-config-4.xml |  2 -
 .../default-configuration-plugin-config-6.xml |  2 -
 .../default-configuration-plugin-config-7.xml |  2 -
 .../default-configuration-plugin-config-8.xml |  2 -
 .../default-configuration-plugin-config.xml   |  2 -
 .../exception-test-plugin-config.xml          |  2 -
 .../exclude-configuration-plugin-config.xml   |  2 -
 .../include-configuration-plugin-config.xml   |  2 -
 .../nojavadocdir-test-plugin-config.xml       |  2 -
 ...avadoclink-configuration-plugin-config.xml |  2 -
 .../unit/pom-test/pom-test-plugin-config.xml  |  1 -
 .../testsourcedir-test-plugin-config.xml      |  2 -
 maven-jxr/pom.xml                             |  6 +-
 .../apache/maven/jxr/DirectoryIndexer.java    | 14 ++--
 .../main/java/org/apache/maven/jxr/JXR.java   |  2 +-
 .../apache/maven/jxr/JavaCodeTransform.java   |  8 +-
 pom.xml                                       | 23 +-----
 37 files changed, 316 insertions(+), 264 deletions(-)

diff --git a/maven-jxr-plugin/pom.xml b/maven-jxr-plugin/pom.xml
index 78e04bfe..38081b60 100644
--- a/maven-jxr-plugin/pom.xml
+++ b/maven-jxr-plugin/pom.xml
@@ -38,8 +38,10 @@ under the License.
   </prerequisites>
 
   <properties>
-    <mavenVersion>3.2.5</mavenVersion>
-    <aetherVersion>1.0.0.v20140518</aetherVersion>
+    <mavenVersion>3.6.3</mavenVersion>
+    <resolverVersion>1.4.1</resolverVersion>
+    <!-- like Maven 3.6.3 -->
+    <wagonVersion>3.5.3</wagonVersion>
   </properties>
 
   <dependencies>
@@ -82,18 +84,17 @@ under the License.
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>
       <artifactId>wagon-provider-api</artifactId>
-      <version>2.8</version>
-      <!-- like Maven 3.2.5 -->
+      <version>${wagonVersion}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-api</artifactId>
-      <version>3.1.1</version>
+      <version>4.0.0-M12</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-impl</artifactId>
-      <version>3.2.0</version>
+      <version>4.0.0-M15</version>
     </dependency>
 
     <!-- shared utils -->
@@ -130,33 +131,33 @@ under the License.
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-api</artifactId>
-      <version>${aetherVersion}</version>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
+      <version>${resolverVersion}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-impl</artifactId>
-      <version>${aetherVersion}</version>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-impl</artifactId>
+      <version>${resolverVersion}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-connector-basic</artifactId>
-      <version>${aetherVersion}</version>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
+      <version>${resolverVersion}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-transport-wagon</artifactId>
-      <version>${aetherVersion}</version>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-wagon</artifactId>
+      <version>${resolverVersion}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.wagon</groupId>
       <artifactId>wagon-http-lightweight</artifactId>
-      <version>3.5.1</version>
+      <version>${wagonVersion}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/maven-jxr-plugin/src/it/JXR-100_parameterlink/verify.groovy b/maven-jxr-plugin/src/it/JXR-100_parameterlink/verify.groovy
index e9591331..383a19b4 100644
--- a/maven-jxr-plugin/src/it/JXR-100_parameterlink/verify.groovy
+++ b/maven-jxr-plugin/src/it/JXR-100_parameterlink/verify.groovy
@@ -16,6 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-assert new File( basedir, 'target/site/xref/com/mycompany/app/Foo.html' ).exists()
+File file = new File( basedir, 'target/reports/xref/com/mycompany/app/Foo.html' );
 
-assert 4 == new File( basedir, '/target/site/xref/com/mycompany/app/Foo.html' ).text.count( '<a name="App" href="../../../com/mycompany/app/App.html#App">App</a>' )
+assert file.exists()
+
+assert 4 == file.text.count( '<a name="App" href="../../../com/mycompany/app/App.html#App">App</a>' )
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
index 569773a7..108c41c4 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/AbstractJxrReport.java
@@ -37,6 +37,7 @@
 import org.apache.maven.jxr.pacman.FileManager;
 import org.apache.maven.jxr.pacman.PackageManager;
 import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
@@ -73,10 +74,7 @@ public abstract class AbstractJxrReport extends AbstractMavenReport {
     /**
      * String used at the bottom of the Xref HTML files.
      */
-    @Parameter(
-            property = "bottom",
-            defaultValue =
-                    "Copyright &#169; {inceptionYear}&#x2013;{currentYear} {organizationName}. All rights reserved.")
+    @Parameter(property = "bottom", defaultValue = "\u00A9 {inceptionYear}\u2013{currentYear} {organizationName}")
     private String bottom;
 
     // CHECKSTYLE_ON: LineLength
@@ -111,12 +109,6 @@ public abstract class AbstractJxrReport extends AbstractMavenReport {
     @Parameter
     private ArrayList<String> includes;
 
-    /**
-     * The projects in the reactor for aggregation report.
-     */
-    @Parameter(defaultValue = "${reactorProjects}", readonly = true)
-    protected List<MavenProject> reactorProjects;
-
     /**
      * Whether to skip this execution.
      *
@@ -202,23 +194,23 @@ && hasSources(currentFile)) {
     }
 
     /**
-     * Creates the Xref for the Java files found in the given source directory and puts them in the given destination
+     * Creates the Xref for the Java files found in the given source directory and puts them in the given output
      * directory.
      *
      * @param locale The user locale to use for the Xref generation
-     * @param destinationDirectory The output directory
+     * @param outputDirectory The output directory
      * @param sourceDirs The source directories
      * @throws java.io.IOException
      * @throws org.apache.maven.jxr.JxrException
      */
-    private void createXref(Locale locale, String destinationDirectory, List<String> sourceDirs)
+    private void createXref(Locale locale, File outputDirectory, List<String> sourceDirs)
             throws IOException, JxrException {
         FileManager fileManager = new FileManager();
         PackageManager packageManager = new PackageManager(fileManager);
         JavaCodeTransform codeTransform = new JavaCodeTransform(packageManager, fileManager);
 
         JXR jxr = new JXR(packageManager, codeTransform);
-        jxr.setDest(Paths.get(destinationDirectory));
+        jxr.setDest(outputDirectory.toPath());
         jxr.setInputEncoding(getInputEncoding());
         jxr.setLocale(locale);
         jxr.setOutputEncoding(getOutputEncoding());
@@ -242,11 +234,11 @@ private void createXref(Locale locale, String destinationDirectory, List<String>
         }
 
         // and finally copy the stylesheet
-        copyRequiredResources(destinationDirectory);
+        copyRequiredResources(outputDirectory);
     }
 
     /**
-     * Returns the bottom text to be displayed at the lower part of the generated JXR reports.
+     * Returns the bottom text to be displayed at the lower part of the generated JXR report.
      */
     private String getBottomText() {
         int currentYear = Calendar.getInstance().get(Calendar.YEAR);
@@ -258,12 +250,12 @@ private String getBottomText() {
 
         if (inceptionYear != null) {
             if (inceptionYear.equals(year)) {
-                theBottom = StringUtils.replace(theBottom, "{inceptionYear}&#x2013;", "");
+                theBottom = StringUtils.replace(theBottom, "{inceptionYear}\u2013", "");
             } else {
                 theBottom = StringUtils.replace(theBottom, "{inceptionYear}", inceptionYear);
             }
         } else {
-            theBottom = StringUtils.replace(theBottom, "{inceptionYear}&#x2013;", "");
+            theBottom = StringUtils.replace(theBottom, "{inceptionYear}\u2013", "");
         }
 
         if (project.getOrganization() == null) {
@@ -293,28 +285,28 @@ private String getBottomText() {
     }
 
     /**
-     * Copy some required resources (like the stylesheet) to the given directory
+     * Copy some required resources (like the stylesheet) to the given target directory
      *
-     * @param dir the directory to copy the resources to
+     * @param targetDirectory the directory to copy the resources to
      */
-    private void copyRequiredResources(String dir) {
+    private void copyRequiredResources(File targetDirectory) {
         if (stylesheet != null && !stylesheet.isEmpty()) {
             File stylesheetFile = new File(stylesheet);
-            File destStylesheetFile = new File(dir, "stylesheet.css");
+            File targetStylesheetFile = new File(targetDirectory, "stylesheet.css");
 
             try {
                 if (stylesheetFile.isAbsolute()) {
-                    FileUtils.copyFile(stylesheetFile, destStylesheetFile);
+                    FileUtils.copyFile(stylesheetFile, targetStylesheetFile);
                 } else {
                     URL stylesheetUrl = this.getClass().getClassLoader().getResource(stylesheet);
-                    FileUtils.copyURLToFile(stylesheetUrl, destStylesheetFile);
+                    FileUtils.copyURLToFile(stylesheetUrl, targetStylesheetFile);
                 }
             } catch (IOException e) {
                 getLog().warn("An error occured while copying the stylesheet to the target directory", e);
             }
         } else {
             if (javadocTemplatesVersion.isAtLeast("1.8")) {
-                copyResources(dir, "jdk8/", "stylesheet.css");
+                copyResources(targetDirectory, "jdk8/", "stylesheet.css");
             } else if (javadocTemplatesVersion.isAtLeast("1.7")) {
                 String[] jdk7Resources = {
                     "stylesheet.css",
@@ -323,14 +315,14 @@ private void copyRequiredResources(String dir) {
                     "resources/titlebar.gif",
                     "resources/titlebar_end.gif"
                 };
-                copyResources(dir, "jdk7/", jdk7Resources);
+                copyResources(targetDirectory, "jdk7/", jdk7Resources);
             } else if (javadocTemplatesVersion.isAtLeast("1.6")) {
-                copyResources(dir, "jdk6/", "stylesheet.css");
+                copyResources(targetDirectory, "jdk6/", "stylesheet.css");
             } else if (javadocTemplatesVersion.isAtLeast("1.4")) {
-                copyResources(dir, "jdk4/", "stylesheet.css");
+                copyResources(targetDirectory, "jdk4/", "stylesheet.css");
             } else {
                 // Fallback to the original stylesheet
-                copyResources(dir, "", "stylesheet.css");
+                copyResources(targetDirectory, "", "stylesheet.css");
             }
         }
     }
@@ -338,16 +330,16 @@ private void copyRequiredResources(String dir) {
     /**
      * Copy styles and related resources to the given directory
      *
-     * @param dir the directory to copy the resources to
+     * @param targetDirectory the target directory to copy the resources to
      * @param sourceDirectory resources subdirectory to copy from
      * @param files names of files to copy
      */
-    private void copyResources(String dir, String sourceDirectory, String... files) {
+    private void copyResources(File targetDirectory, String sourceDirectory, String... files) {
         try {
             for (String file : files) {
                 URL resourceUrl = this.getClass().getClassLoader().getResource(sourceDirectory + file);
-                File destResourceFile = new File(dir, file);
-                FileUtils.copyURLToFile(resourceUrl, destResourceFile);
+                File targetResourceFile = new File(targetDirectory, file);
+                FileUtils.copyURLToFile(resourceUrl, targetResourceFile);
             }
         } catch (IOException e) {
             getLog().warn("An error occured while copying the resource to the target directory", e);
@@ -359,14 +351,18 @@ protected MavenProject getProject() {
         return project;
     }
 
-    /**
-     * Returns the Maven session.
-     * @return Maven session
-     */
     protected MavenSession getSession() {
         return session;
     }
 
+    protected List<MavenProject> getReactorProjects() {
+        return reactorProjects;
+    }
+
+    protected MojoExecution getMojoExecution() {
+        return mojoExecution;
+    }
+
     /**
      * Returns the correct resource bundle according to the locale.
      *
@@ -386,7 +382,7 @@ protected void executeReport(Locale locale) throws MavenReportException {
         setJavadocTemplatesVersion();
 
         try {
-            createXref(locale, getDestinationDirectory(), constructSourceDirs());
+            createXref(locale, getPluginReportOutputDirectory(), constructSourceDirs());
         } catch (JxrException | IOException e) {
             throw new MavenReportException("Error while generating the HTML source code of the project.", e);
         }
@@ -450,7 +446,6 @@ protected List<String> constructSourceDirs() {
     @Override
     public boolean canGenerateReport() {
         if (skip) {
-            getLog().info("Skipping JXR.");
             return false;
         }
 
@@ -528,11 +523,12 @@ private Path getJavadocLocation() throws IOException {
     }
 
     /**
-     * Abstract method that returns the target directory where the generated JXR reports will be put.
+     * Abstract method that returns the plugin report output directory where the generated JXR report will be put
+     * beneath {@link #getReportOutputDirectory()}.
      *
-     * @return a String that contains the target directory name
+     * @return a File for the plugin's report output directory
      */
-    protected abstract String getDestinationDirectory();
+    protected abstract File getPluginReportOutputDirectory();
 
     /**
      * Abstract method that returns the specified source directories that will be included in the JXR report generation.
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrNoForkReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrNoForkReport.java
index a407ca83..b4d5ea58 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrNoForkReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrNoForkReport.java
@@ -23,7 +23,7 @@
 import org.apache.maven.plugins.annotations.Mojo;
 
 /**
- * Creates an html-based, cross referenced version of Java source code
+ * Creates an HTML-based, cross referenced version of Java source code
  * for a project without forking. Note that this goal does require generation of sources before
  * site generation, e.g. by invoking {@code }mvn clean deploy site}.
  *
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
index 6a348f2b..dfe3e757 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrReport.java
@@ -31,7 +31,7 @@
 import org.apache.maven.project.MavenProject;
 
 /**
- * Creates an html-based, cross referenced version of Java source code
+ * Creates an HTML-based, cross referenced version of Java source code
  * for a project.
  *
  * @author <a href="mailto:bellingard.NO-SPAM@gmail.com">Fabrice Bellingard</a>
@@ -52,12 +52,6 @@ public class JxrReport extends AbstractJxrReport {
     @Parameter
     private String sourcePath;
 
-    /**
-     * Directory where the Xref files will be copied to.
-     */
-    @Parameter(defaultValue = "${project.reporting.outputDirectory}/xref")
-    private String destDir;
-
     /**
      * Directory where Javadoc is generated for this project.
      */
@@ -65,8 +59,8 @@ public class JxrReport extends AbstractJxrReport {
     private File javadocDir;
 
     @Override
-    protected String getDestinationDirectory() {
-        return destDir;
+    protected File getPluginReportOutputDirectory() {
+        return new File(getReportOutputDirectory(), "xref");
     }
 
     @Override
@@ -80,12 +74,12 @@ protected List<String> getSourceRoots() {
 
         List<String> l = new ArrayList<>();
 
-        if (!"pom".equals(getProject().getPackaging().toLowerCase(Locale.US))) {
+        if (!"pom".equals(getProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
             l.addAll(sourceDirs);
         }
 
         if (getProject().getExecutionProject() != null) {
-            if (!"pom".equals(getProject().getExecutionProject().getPackaging().toLowerCase(Locale.US))) {
+            if (!"pom".equals(getProject().getExecutionProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
                 l.addAll(getProject().getExecutionProject().getCompileSourceRoots());
             }
         }
@@ -97,12 +91,12 @@ protected List<String> getSourceRoots() {
     protected List<String> getSourceRoots(MavenProject project) {
         List<String> l = new ArrayList<>();
 
-        if (!"pom".equals(project.getPackaging().toLowerCase(Locale.US))) {
+        if (!"pom".equals(project.getPackaging().toLowerCase(Locale.ENGLISH))) {
             l.addAll(project.getCompileSourceRoots());
         }
 
         if (project.getExecutionProject() != null) {
-            if (!"pom".equals(project.getExecutionProject().getPackaging().toLowerCase(Locale.US))) {
+            if (!"pom".equals(project.getExecutionProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
                 l.addAll(project.getExecutionProject().getCompileSourceRoots());
             }
         }
@@ -129,14 +123,4 @@ public String getOutputName() {
     protected File getJavadocDir() {
         return javadocDir;
     }
-
-    @Override
-    public void setReportOutputDirectory(File reportOutputDirectory) {
-        if ((reportOutputDirectory != null)
-                && (!reportOutputDirectory.getAbsolutePath().endsWith("xref"))) {
-            this.destDir = new File(reportOutputDirectory, "xref").getAbsolutePath();
-        } else {
-            this.destDir = reportOutputDirectory.getAbsolutePath();
-        }
-    }
 }
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestNoForkReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestNoForkReport.java
index bf5d16c0..df32a827 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestNoForkReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestNoForkReport.java
@@ -23,7 +23,7 @@
 import org.apache.maven.plugins.annotations.Mojo;
 
 /**
- * Creates an html-based, cross referenced version of Java source code
+ * Creates an HTML-based, cross referenced version of Java source code
  * for a project's test sources without forking. Note that this goal does require generation of test
  * sources before site generation, e.g. by invoking {@code }mvn clean deploy site}.
  *
diff --git a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestReport.java b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestReport.java
index 1f9d1584..7a390402 100644
--- a/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestReport.java
+++ b/maven-jxr-plugin/src/main/java/org/apache/maven/plugin/jxr/JxrTestReport.java
@@ -30,8 +30,8 @@
 import org.apache.maven.project.MavenProject;
 
 /**
- * Creates an html-based, cross referenced version of Java source code
- * for a project's test sources.
+ * Creates an HTML-based, cross referenced version of Java test source code
+ * for a project.
  *
  * @author <a href="mailto:bellingard.NO-SPAM@gmail.com">Fabrice Bellingard</a>
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
@@ -45,12 +45,6 @@ public class JxrTestReport extends AbstractJxrReport {
     @Parameter(defaultValue = "${project.testCompileSourceRoots}", required = true, readonly = true)
     private List<String> sourceDirs;
 
-    /**
-     * Directory where the Xref files will be copied to.
-     */
-    @Parameter(defaultValue = "${project.reporting.outputDirectory}/xref-test")
-    private String destDir;
-
     /**
      * Directory where Test Javadoc is generated for this project.
      */
@@ -61,12 +55,12 @@ public class JxrTestReport extends AbstractJxrReport {
     protected List<String> getSourceRoots() {
         List<String> l = new ArrayList<>();
 
-        if (!"pom".equals(getProject().getPackaging().toLowerCase(Locale.US))) {
+        if (!"pom".equals(getProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
             l.addAll(sourceDirs);
         }
 
         if (getProject().getExecutionProject() != null) {
-            if (!"pom".equals(getProject().getExecutionProject().getPackaging().toLowerCase(Locale.US))) {
+            if (!"pom".equals(getProject().getExecutionProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
                 l.addAll(getProject().getExecutionProject().getTestCompileSourceRoots());
             }
         }
@@ -79,7 +73,7 @@ protected List<String> getSourceRoots(MavenProject project) {
         List<String> l = new ArrayList<>();
 
         if (project.getExecutionProject() != null) {
-            if (!"pom".equals(project.getExecutionProject().getPackaging().toLowerCase(Locale.US))) {
+            if (!"pom".equals(project.getExecutionProject().getPackaging().toLowerCase(Locale.ENGLISH))) {
                 l.addAll(project.getExecutionProject().getTestCompileSourceRoots());
             }
         }
@@ -88,8 +82,8 @@ protected List<String> getSourceRoots(MavenProject project) {
     }
 
     @Override
-    protected String getDestinationDirectory() {
-        return destDir;
+    protected File getPluginReportOutputDirectory() {
+        return new File(getReportOutputDirectory(), "xref-test");
     }
 
     @Override
@@ -111,14 +105,4 @@ public String getOutputName() {
     protected File getJavadocDir() {
         return testJavadocDir;
     }
-
-    @Override
-    public void setReportOutputDirectory(File reportOutputDirectory) {
-        if ((reportOutputDirectory != null)
-                && (!reportOutputDirectory.getAbsolutePath().endsWith("xref-test"))) {
-            this.destDir = new File(reportOutputDirectory, "xref-test").getAbsolutePath();
-        } else {
-            this.destDir = reportOutputDirectory.getAbsolutePath();
-        }
-    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/AbstractJxrTestCase.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/AbstractJxrTestCase.java
index b865c5a5..8a9ec5e3 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/AbstractJxrTestCase.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/AbstractJxrTestCase.java
@@ -21,8 +21,14 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
+import java.util.Collections;
+import java.util.List;
 
+import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.LegacySupport;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.apache.maven.plugin.testing.ArtifactStubFactory;
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
@@ -112,8 +118,17 @@ protected AbstractJxrReport createReportMojo(String goal, File pluginXmlFile) th
         repoSession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory()
                 .newInstance(repoSession, new LocalRepository(artifactStubFactory.getWorkingDir())));
 
+        List<MavenProject> reactorProjects =
+                mojo.getReactorProjects() != null ? mojo.getReactorProjects() : Collections.emptyList();
+
+        setVariableValueToObject(mojo, "mojoExecution", getMockMojoExecution());
         setVariableValueToObject(mojo, "session", legacySupport.getSession());
-        setVariableValueToObject(mojo, "remoteRepositories", mojo.getProject().getRemoteArtifactRepositories());
+        setVariableValueToObject(mojo, "repoSession", legacySupport.getRepositorySession());
+        setVariableValueToObject(mojo, "reactorProjects", reactorProjects);
+        setVariableValueToObject(
+                mojo, "remoteProjectRepositories", mojo.getProject().getRemoteProjectRepositories());
+        setVariableValueToObject(
+                mojo, "siteDirectory", new File(mojo.getProject().getBasedir(), "src/site"));
         return mojo;
     }
 
@@ -139,4 +154,22 @@ protected File generateReport(AbstractJxrReport mojo, File pluginXmlFile) throws
     protected String readFile(File xrefTestDir, String fileName) throws IOException {
         return new String(Files.readAllBytes(xrefTestDir.toPath().resolve(fileName)));
     }
+
+    private MojoExecution getMockMojoExecution() {
+        MojoDescriptor md = new MojoDescriptor();
+        md.setGoal(getGoal());
+
+        MojoExecution me = new MojoExecution(md);
+
+        PluginDescriptor pd = new PluginDescriptor();
+        Plugin p = new Plugin();
+        p.setGroupId("org.apache.maven.plugins");
+        p.setArtifactId("maven-jxr-plugin");
+        pd.setPlugin(p);
+        md.setPluginDescriptor(pd);
+
+        return me;
+    }
+
+    protected abstract String getGoal();
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrReportTest.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrReportTest.java
index 2a614b65..268328d1 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrReportTest.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrReportTest.java
@@ -43,7 +43,7 @@ public void testDefaultConfiguration() throws Exception {
 
         FileUtils.copyDirectory(new File(resourcesDir, "javadoc-files"), outputDir);
 
-        generateReport("jxr", "default-configuration/default-configuration-plugin-config.xml");
+        generateReport(getGoal(), "default-configuration/default-configuration-plugin-config.xml");
 
         // check if xref files were generated
         assertTrue(new File(xrefDir, "allclasses-frame.html").exists());
@@ -80,7 +80,7 @@ public void testJdk4Configuration() throws Exception {
 
         FileUtils.copyDirectory(new File(resourcesDir, "javadoc-files"), outputDir);
 
-        generateReport("jxr", "default-configuration/default-configuration-plugin-config-4.xml");
+        generateReport(getGoal(), "default-configuration/default-configuration-plugin-config-4.xml");
 
         // check if xref files were generated
         assertTrue(new File(xrefDir, "allclasses-frame.html").exists());
@@ -95,10 +95,10 @@ public void testJdk4Configuration() throws Exception {
 
         // check if there's a link to the javadoc files
         String str = readFile(xrefDir, "def/configuration/AppSample.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/appsample.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/appsample.html\""));
 
         str = readFile(xrefDir, "def/configuration/App.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/app.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/app.html\""));
 
         // check if encoding is UTF-8, the default value
         assertTrue(str.contains("text/html; charset=UTF-8"));
@@ -117,7 +117,7 @@ public void testJdk6Configuration() throws Exception {
 
         FileUtils.copyDirectory(new File(resourcesDir, "javadoc-files"), outputDir);
 
-        generateReport("jxr", "default-configuration/default-configuration-plugin-config-6.xml");
+        generateReport(getGoal(), "default-configuration/default-configuration-plugin-config-6.xml");
 
         // check if xref files were generated
         assertTrue(new File(xrefDir, "allclasses-frame.html").exists());
@@ -132,10 +132,10 @@ public void testJdk6Configuration() throws Exception {
 
         // check if there's a link to the javadoc files
         String str = readFile(xrefDir, "def/configuration/AppSample.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/appsample.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/appsample.html\""));
 
         str = readFile(xrefDir, "def/configuration/App.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/app.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/app.html\""));
 
         // check if encoding is UTF-8, the default value
         assertTrue(str.contains("text/html; charset=UTF-8"));
@@ -154,7 +154,7 @@ public void testJdk7Configuration() throws Exception {
 
         FileUtils.copyDirectory(new File(resourcesDir, "javadoc-files"), outputDir);
 
-        generateReport("jxr", "default-configuration/default-configuration-plugin-config-7.xml");
+        generateReport(getGoal(), "default-configuration/default-configuration-plugin-config-7.xml");
 
         // check if xref files were generated
         assertTrue(new File(xrefDir, "allclasses-frame.html").exists());
@@ -173,10 +173,10 @@ public void testJdk7Configuration() throws Exception {
 
         // check if there's a link to the javadoc files
         String str = readFile(xrefDir, "def/configuration/AppSample.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/appsample.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/appsample.html\""));
 
         str = readFile(xrefDir, "def/configuration/App.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/def/configuration/app.html\""));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/def/configuration/app.html\""));
 
         // check if encoding is UTF-8, the default value
         assertTrue(str.contains("text/html; charset=UTF-8"));
@@ -195,7 +195,7 @@ public void testJdk8Configuration() throws Exception {
 
         FileUtils.copyDirectory(new File(resourcesDir, "javadoc-files"), outputDir);
 
-        generateReport("jxr", "default-configuration/default-configuration-plugin-config-8.xml");
+        generateReport(getGoal(), "default-configuration/default-configuration-plugin-config-8.xml");
 
         // check if xref files were generated
         assertTrue(new File(xrefDir, "allclasses-frame.html").exists());
@@ -225,7 +225,7 @@ public void testJdk8Configuration() throws Exception {
      * @throws Exception
      */
     public void testNoJavadocLink() throws Exception {
-        generateReport("jxr", "nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml");
+        generateReport(getGoal(), "nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml");
 
         File xrefDir = new File(getBasedir(), "target/test/unit/nojavadoclink-configuration/target/site/xref");
 
@@ -245,10 +245,11 @@ public void testNoJavadocLink() throws Exception {
 
         // check if there's a link to the javadoc files
         String str = readFile(xrefDir, "nojavadoclink/configuration/AppSample.html");
-        assertEquals(str.toLowerCase(Locale.US).indexOf("/apidocs/nojavadoclink/configuration/appsample.html\""), -1);
+        assertEquals(
+                str.toLowerCase(Locale.ENGLISH).indexOf("/apidocs/nojavadoclink/configuration/appsample.html\""), -1);
 
         str = readFile(xrefDir, "nojavadoclink/configuration/App.html");
-        assertEquals(str.toLowerCase(Locale.US).indexOf("/apidocs/nojavadoclink/configuration/app.html\""), -1);
+        assertEquals(str.toLowerCase(Locale.ENGLISH).indexOf("/apidocs/nojavadoclink/configuration/app.html\""), -1);
 
         str = readFile(xrefDir, "nojavadoclink/configuration/sample/Sample.html");
         assertEquals(str.toLowerCase().indexOf("/apidocs/nojavadoclink/configuration/sample/sample.html\""), -1);
@@ -263,7 +264,7 @@ public void testNoJavadocLink() throws Exception {
      * @throws Exception
      */
     public void testAggregate() throws Exception {
-        generateReport("jxr", "aggregate-test/aggregate-test-plugin-config.xml");
+        generateReport(getGoal(), "aggregate-test/aggregate-test-plugin-config.xml");
 
         File xrefDir = new File(getBasedir(), "target/test/unit/aggregate-test/target/site/xref");
 
@@ -286,16 +287,16 @@ public void testAggregate() throws Exception {
      * @throws Exception
      */
     public void testNoJavadocDir() throws Exception {
-        generateReport("jxr", "nojavadocdir-test/nojavadocdir-test-plugin-config.xml");
+        generateReport(getGoal(), "nojavadocdir-test/nojavadocdir-test-plugin-config.xml");
 
         File xrefDir = new File(getBasedir(), "target/test/unit/nojavadocdir-test/target/site/xref");
 
         // check if there's a link to the javadoc files
         String str = readFile(xrefDir, "nojavadocdir/test/AppSample.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/nojavadocdir/test/appsample.html"));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/nojavadocdir/test/appsample.html"));
 
         str = readFile(xrefDir, "nojavadocdir/test/App.html");
-        assertTrue(str.toLowerCase(Locale.US).contains("/apidocs/nojavadocdir/test/app.html"));
+        assertTrue(str.toLowerCase(Locale.ENGLISH).contains("/apidocs/nojavadocdir/test/app.html"));
     }
 
     /**
@@ -304,7 +305,7 @@ public void testNoJavadocDir() throws Exception {
      * @throws Exception
      */
     public void testExclude() throws Exception {
-        generateReport("jxr", "exclude-configuration/exclude-configuration-plugin-config.xml");
+        generateReport(getGoal(), "exclude-configuration/exclude-configuration-plugin-config.xml");
 
         Path xrefDir = new File(getBasedir(), "target/test/unit/exclude-configuration/target/site/xref").toPath();
 
@@ -321,7 +322,7 @@ public void testExclude() throws Exception {
      * @throws Exception
      */
     public void testInclude() throws Exception {
-        generateReport("jxr", "include-configuration/include-configuration-plugin-config.xml");
+        generateReport(getGoal(), "include-configuration/include-configuration-plugin-config.xml");
 
         Path xrefDir = new File(getBasedir(), "target/test/unit/include-configuration/target/site/xref").toPath();
 
@@ -334,7 +335,7 @@ public void testInclude() throws Exception {
 
     public void testExceptions() {
         try {
-            generateReport("jxr", "default-configuration/exception-test-plugin-config.xml");
+            generateReport(getGoal(), "default-configuration/exception-test-plugin-config.xml");
 
             fail("Must throw exception");
         } catch (Exception e) {
@@ -348,8 +349,13 @@ public void testExceptions() {
      * @throws Exception
      */
     public void testPom() throws Exception {
-        generateReport("jxr", "pom-test/pom-test-plugin-config.xml");
+        generateReport(getGoal(), "pom-test/pom-test-plugin-config.xml");
 
         assertFalse(new File(getBasedir(), "target/test/unit/pom-test").exists());
     }
+
+    @Override
+    protected String getGoal() {
+        return "jxr";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
index 4acbc6ba..921c5823 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/JxrTestReportTest.java
@@ -30,7 +30,7 @@ public class JxrTestReportTest extends AbstractJxrTestCase {
      * @throws Exception
      */
     public void testSourceDir() throws Exception {
-        generateReport("test-jxr", "testsourcedir-test/testsourcedir-test-plugin-config.xml");
+        generateReport(getGoal(), "testsourcedir-test/testsourcedir-test-plugin-config.xml");
 
         File xrefTestDir = new File(getBasedir(), "target/test/unit/testsourcedir-test/target/site/xref-test");
 
@@ -52,4 +52,9 @@ public void testSourceDir() throws Exception {
         str = readFile(xrefTestDir, "testsourcedir/test/AppTest.html");
         assertFalse(str.toLowerCase().contains("/apidocs/testsourcedir/test/App.html\"".toLowerCase()));
     }
+
+    @Override
+    protected String getGoal() {
+        return "test-jxr";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/AggregateTestMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/AggregateTestMavenProjectStub.java
index 572e9c54..9c7e1fa5 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/AggregateTestMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/AggregateTestMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,24 +28,21 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ReportPlugin;
 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>
  */
-public class AggregateTestMavenProjectStub extends MavenProjectStub {
+public class AggregateTestMavenProjectStub extends JxrProjectStub {
     private List<ReportPlugin> reportPlugins = new ArrayList<>();
 
     public AggregateTestMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(
-                    getBasedir() + "/src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -54,7 +53,7 @@ public AggregateTestMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/aggregate-test/aggregate/test");
+        compileSourceRoots.add(basedir + "/aggregate/test");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -70,4 +69,14 @@ public AggregateTestMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/aggregate-test");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "aggregate-test-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/DefaultConfigurationMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/DefaultConfigurationMavenProjectStub.java
index d2219483..eab947e4 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/DefaultConfigurationMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/DefaultConfigurationMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,24 +28,21 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ReportPlugin;
 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>
  */
-public class DefaultConfigurationMavenProjectStub extends MavenProjectStub {
+public class DefaultConfigurationMavenProjectStub extends JxrProjectStub {
     private List<ReportPlugin> reportPlugins = new ArrayList<>();
 
     public DefaultConfigurationMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(getBasedir()
-                    + "/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -54,7 +53,7 @@ public DefaultConfigurationMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/default-configuration/def/configuration");
+        compileSourceRoots.add(basedir + "/def/configuration");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -69,4 +68,14 @@ public DefaultConfigurationMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/default-configuration");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "default-configuration-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/ExcludeConfigurationMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/ExcludeConfigurationMavenProjectStub.java
index 9866204f..4ce55f77 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/ExcludeConfigurationMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/ExcludeConfigurationMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,12 +39,10 @@ public ExcludeConfigurationMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(getBasedir()
-                    + "/src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -53,7 +53,7 @@ public ExcludeConfigurationMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/exclude-configuration/exclude/configuration");
+        compileSourceRoots.add(basedir + "/exclude/configuration");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -68,4 +68,14 @@ public ExcludeConfigurationMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/exclude-configuration");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "exclude-configuration-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/IncludeConfigurationMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/IncludeConfigurationMavenProjectStub.java
index 5130359b..617f6fa0 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/IncludeConfigurationMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/IncludeConfigurationMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,12 +39,10 @@ public IncludeConfigurationMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(getBasedir()
-                    + "/src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -53,7 +53,7 @@ public IncludeConfigurationMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/include-configuration/include/configuration");
+        compileSourceRoots.add(basedir + "/include/configuration");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -68,4 +68,14 @@ public IncludeConfigurationMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/include-configuration");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "include-configuration-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/JxrProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/JxrProjectStub.java
index 12bf7d4c..57b40ca4 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/JxrProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/JxrProjectStub.java
@@ -18,16 +18,34 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.maven.RepositoryUtils;
 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;
+import org.eclipse.aether.repository.RemoteRepository;
 
 public abstract class JxrProjectStub extends MavenProjectStub {
+    /**
+     * @return the POM file name
+     */
+    protected abstract String getPOM();
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/src/test/resources/unit/");
+    }
+
+    @Override
+    public File getFile() {
+        return new File(getBasedir(), getPOM());
+    }
+
     @Override
     public List<ArtifactRepository> getRemoteArtifactRepositories() {
         ArtifactRepository repository = new MavenArtifactRepository(
@@ -39,4 +57,9 @@ public List<ArtifactRepository> getRemoteArtifactRepositories() {
 
         return Collections.singletonList(repository);
     }
+
+    @Override
+    public List<RemoteRepository> getRemoteProjectRepositories() {
+        return RepositoryUtils.toRepos(getRemoteArtifactRepositories());
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocDirMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocDirMavenProjectStub.java
index 1e1368b4..8c75f11c 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocDirMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocDirMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,12 +39,10 @@ public NoJavadocDirMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(
-                    getBasedir() + "/src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -53,7 +53,7 @@ public NoJavadocDirMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/nojavadocdir-test/nojavadocdir/test");
+        compileSourceRoots.add(basedir + "/nojavadocdir/test");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -68,4 +68,14 @@ public NoJavadocDirMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/nojavadocdir-test");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "nojavadocdir-test-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocLinkConfigurationMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocLinkConfigurationMavenProjectStub.java
index 342d8d64..8f89038b 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocLinkConfigurationMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/NoJavadocLinkConfigurationMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,26 +28,21 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.ReportPlugin;
 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>
  */
-public class NoJavadocLinkConfigurationMavenProjectStub extends MavenProjectStub {
+public class NoJavadocLinkConfigurationMavenProjectStub extends JxrProjectStub {
     List<ReportPlugin> reportPlugins;
 
     public NoJavadocLinkConfigurationMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(
-                    new FileReader(
-                            getBasedir()
-                                    + "/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -56,8 +53,7 @@ public NoJavadocLinkConfigurationMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(
-                basedir + "/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink/configuration");
+        compileSourceRoots.add(basedir + "/nojavadoclink/configuration");
         setCompileSourceRoots(compileSourceRoots);
 
         // set the report plugins
@@ -72,4 +68,14 @@ public NoJavadocLinkConfigurationMavenProjectStub() {
     public List<ReportPlugin> getReportPlugins() {
         return reportPlugins;
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/nojavadoclink-configuration");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "nojavadoclink-configuration-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/PomMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/PomMavenProjectStub.java
index cadb456d..6682ba30 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/PomMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/PomMavenProjectStub.java
@@ -19,30 +19,29 @@
 package org.apache.maven.plugin.jxr.stubs;
 
 import java.io.File;
-import java.io.FileReader;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
  */
-public class PomMavenProjectStub extends MavenProjectStub {
+public class PomMavenProjectStub extends JxrProjectStub {
     private Build build;
 
     public PomMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
-        Model model;
+        Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(new File(getBasedir(), "pom-test-plugin-config.xml")));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+        } catch (Exception ignored) {
         }
 
         setGroupId(model.getGroupId());
@@ -54,11 +53,11 @@ public PomMavenProjectStub() {
 
         Build build = new Build();
         build.setFinalName(model.getArtifactId());
-        build.setDirectory(super.getBasedir() + "/target/test/unit/pom-test/target");
+        build.setDirectory(getBasedir() + "/target");
         build.setSourceDirectory(getBasedir() + "/src/main/java");
-        build.setOutputDirectory(super.getBasedir() + "/target/test/unit/pom-test/target/classes");
+        build.setOutputDirectory(getBasedir() + "/target/classes");
         build.setTestSourceDirectory(getBasedir() + "/src/test/java");
-        build.setTestOutputDirectory(super.getBasedir() + "/target/test/unit/pom-test/target/test-classes");
+        build.setTestOutputDirectory(getBasedir() + "/target/test-classes");
         setBuild(build);
 
         List<String> compileSourceRoots = new ArrayList<>();
@@ -84,10 +83,13 @@ public void setBuild(Build build) {
         this.build = build;
     }
 
-    /**
-     * @see org.apache.maven.plugin.testing.stubs.MavenProjectStub#getBasedir()
-     */
+    @Override
     public File getBasedir() {
-        return new File(super.getBasedir() + "/src/test/resources/unit/pom-test");
+        return new File(super.getBasedir() + "/pom-test");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "pom-test-plugin-config.xml";
     }
 }
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/TestSourceDirMavenProjectStub.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/TestSourceDirMavenProjectStub.java
index a286b607..3214cafc 100644
--- a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/TestSourceDirMavenProjectStub.java
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/TestSourceDirMavenProjectStub.java
@@ -18,7 +18,9 @@
  */
 package org.apache.maven.plugin.jxr.stubs;
 
-import java.io.FileReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -35,12 +37,10 @@ public TestSourceDirMavenProjectStub() {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
         Model model = null;
 
-        try {
-            model = pomReader.read(new FileReader(
-                    getBasedir() + "/src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml"));
+        try (InputStream is = new FileInputStream(new File(getBasedir() + "/" + getPOM()))) {
+            model = pomReader.read(is);
             setModel(model);
         } catch (Exception ignored) {
-
         }
 
         setArtifactId(model.getArtifactId());
@@ -51,11 +51,21 @@ public TestSourceDirMavenProjectStub() {
 
         String basedir = getBasedir().getAbsolutePath();
         List<String> compileSourceRoots = new ArrayList<>();
-        compileSourceRoots.add(basedir + "/src/test/resources/unit/testsourcedir-test");
+        compileSourceRoots.add(basedir);
         setCompileSourceRoots(compileSourceRoots);
 
         Artifact artifact = new JxrPluginArtifactStub(getGroupId(), getArtifactId(), getVersion(), getPackaging());
         artifact.setArtifactHandler(new DefaultArtifactHandlerStub());
         setArtifact(artifact);
     }
+
+    @Override
+    public File getBasedir() {
+        return new File(super.getBasedir() + "/testsourcedir-test");
+    }
+
+    @Override
+    protected String getPOM() {
+        return "testsourcedir-test-plugin-config.xml";
+    }
 }
diff --git a/maven-jxr-plugin/src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml
index 27bac585..73c0ab46 100644
--- a/maven-jxr-plugin/src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml
@@ -41,7 +41,6 @@ under the License.
             <value>${basedir}/src/test/resources/unit/aggregate-test/submodule1</value>
             <value>${basedir}/src/test/resources/unit/aggregate-test/submodule2</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/aggregate-test/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/aggregate-test/target/site/apidocs</javadocDir>
           <linkJavadoc>false</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
@@ -51,7 +50,6 @@ under the License.
             <project implementation="org.apache.maven.plugin.jxr.stubs.AggregateSubmodule1MavenProjectStub"/>
             <project implementation="org.apache.maven.plugin.jxr.stubs.AggregateSubmodule2MavenProjectStub"/>
           </reactorProjects>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-4.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-4.xml
index bf302a1b..410f864f 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-4.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-4.xml
@@ -39,12 +39,10 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/4/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/4/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.4</javadocVersion>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-6.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-6.xml
index eac7aeea..5d0184db 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-6.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-6.xml
@@ -39,12 +39,10 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/6/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/6/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.6</javadocVersion>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-7.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-7.xml
index dbe4d6d0..8620129b 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-7.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-7.xml
@@ -39,12 +39,10 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/7/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/7/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.7</javadocVersion>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-8.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-8.xml
index 9e330921..486776a7 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-8.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config-8.xml
@@ -39,12 +39,10 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/8/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/8/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.8</javadocVersion>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
index 1f4769d4..a457dce8 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml
@@ -39,14 +39,12 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <templateDir>templates</templateDir>
           <stylesheet>stylesheet.css</stylesheet>
           <javadocVersion>3</javadocVersion>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/default-configuration/exception-test-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/default-configuration/exception-test-plugin-config.xml
index cd37da41..06039de9 100644
--- a/maven-jxr-plugin/src/test/resources/unit/default-configuration/exception-test-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/default-configuration/exception-test-plugin-config.xml
@@ -40,13 +40,11 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/default-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/default-configuration/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/default-configuration/target/site/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <templateDir>temp</templateDir>
           <stylesheet>stylesheet.css</stylesheet>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml
index d1364876..ff9bef70 100644
--- a/maven-jxr-plugin/src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml
@@ -40,7 +40,6 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/exclude-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/exclude-configuration/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/exclude-configuration/target/site/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
@@ -49,7 +48,6 @@ under the License.
           <excludes>
             <exclude>**/AppSample.java</exclude>
           </excludes>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml
index d0cfaed3..2cda9596 100644
--- a/maven-jxr-plugin/src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml
@@ -40,7 +40,6 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/include-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/include-configuration/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/include-configuration/target/site/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
@@ -49,7 +48,6 @@ under the License.
           <includes>
             <include>**/App.java</include>
           </includes>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml
index 0c3a0b26..fed568a8 100644
--- a/maven-jxr-plugin/src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml
@@ -40,13 +40,11 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/nojavadocdir-test</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/nojavadocdir-test/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/nojavadocdir-test/target/site/apidocs</javadocDir>
           <linkJavadoc>true</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.4</javadocVersion>
           <stylesheet>stylesheet.css</stylesheet>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml
index ba569bce..b66627d2 100644
--- a/maven-jxr-plugin/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml
@@ -40,13 +40,11 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/nojavadoclink-configuration</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/nojavadoclink-configuration/target/site/xref</destDir>
           <javadocDir>${basedir}/target/test/unit/nojavadoclink-configuration/target/site/apidocs</javadocDir>
           <linkJavadoc>false</linkJavadoc>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.4</javadocVersion>
           <stylesheet>stylesheet.css</stylesheet>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/pom-test/pom-test-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/pom-test/pom-test-plugin-config.xml
index 257aa0ba..ae65ab4d 100644
--- a/maven-jxr-plugin/src/test/resources/unit/pom-test/pom-test-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/pom-test/pom-test-plugin-config.xml
@@ -41,7 +41,6 @@ under the License.
         <configuration>
           <project implementation="org.apache.maven.plugin.jxr.stubs.PomMavenProjectStub"/>
           <outputDirectory>${basedir}/target/test/unit/pom-test/target/site/</outputDirectory>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr-plugin/src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml b/maven-jxr-plugin/src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml
index 23bccd90..75834997 100644
--- a/maven-jxr-plugin/src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml
+++ b/maven-jxr-plugin/src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml
@@ -40,11 +40,9 @@ under the License.
           <sourceDirs>
             <value>${basedir}/src/test/resources/unit/testsourcedir-test/src/test/java</value>
           </sourceDirs>
-          <destDir>${basedir}/target/test/unit/testsourcedir-test/target/site/xref-test</destDir>
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.4</javadocVersion>
           <stylesheet>stylesheet.css</stylesheet>
-          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/maven-jxr/pom.xml b/maven-jxr/pom.xml
index 0c2098e4..3dfd0605 100644
--- a/maven-jxr/pom.xml
+++ b/maven-jxr/pom.xml
@@ -42,8 +42,8 @@ under the License.
     </dependency>
     <dependency>
       <groupId>org.apache.velocity</groupId>
-      <artifactId>velocity</artifactId>
-      <version>1.7</version>
+      <artifactId>velocity-engine-core</artifactId>
+      <version>2.3</version>
     </dependency>
 
     <dependency>
@@ -64,7 +64,7 @@ under the License.
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-checkstyle-plugin</artifactId>
-          <!-- 
+          <!--
                The following has to be excluded from checkstyle. Otherwise
                it will fail based on the license of the file until
                a better solution exists.
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
index fa25b9ef..fb6f0850 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/DirectoryIndexer.java
@@ -236,21 +236,17 @@ private void setProperties(VelocityEngine engine) {
         Path templateDirFile = Paths.get(getTemplateDir());
         if (templateDirFile.isAbsolute()) {
             // the property has been overridden: need to use a FileResourceLoader
-            engine.setProperty("resource.loader", "file");
+            engine.setProperty("resource.loaders", "file");
             engine.setProperty(
-                    "file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
-            engine.setProperty("file.resource.loader.path", templateDirFile.toString());
+                    "resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
+            engine.setProperty("resource.loader.file.path", templateDirFile.toString());
         } else {
             // use of the default templates
-            engine.setProperty("resource.loader", "classpath");
+            engine.setProperty("resource.loaders", "classpath");
             engine.setProperty(
-                    "classpath.resource.loader.class",
+                    "resource.loader.classpath.class",
                     "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
         }
-        // avoid "unable to find resource 'VM_global_library.vm' in any resource loader."
-        engine.setProperty("velocimacro.library", "");
-        //        engine.setProperty( Log.class.getName(), log );
-        //        engine.setProperty( "runtime.log.logsystem.class", VelocityLogger.class.getName() );
     }
 
     /*
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
index 2c9beb35..c9542db7 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JXR.java
@@ -40,7 +40,7 @@ public class JXR {
     private final PackageManager pkgmgr;
 
     /**
-     * Handles taking .java files and changing them into html. "More than meets
+     * Handles taking .java files and changing them into HTML. "More than meets
      * the eye!" :)
      */
     private final JavaCodeTransform transformer;
diff --git a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
index 3740e096..cc3b0054 100644
--- a/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
+++ b/maven-jxr/src/main/java/org/apache/maven/jxr/JavaCodeTransform.java
@@ -82,8 +82,8 @@
 import org.apache.maven.jxr.util.StringEntry;
 
 /**
- * Syntax highlights java by turning it into html. A codeviewer object is created and then keeps state as lines are
- * passed in. Each line passed in as java test, is returned as syntax highlighted html text. Users of the class can set
+ * Syntax highlights java by turning it into HTML. A codeviewer object is created and then keeps state as lines are
+ * passed in. Each line passed in as java test, is returned as syntax highlighted HTML text. Users of the class can set
  * how the java code will be highlighted with setter methods. Only valid java lines should be passed in since the object
  * maintains state and may not handle illegal code gracefully. The actual system is implemented as a series of filters
  * that deal with specific portions of the java code. The filters are as follows:
@@ -640,10 +640,10 @@ private String xrLine(String line, String packageName, ClassType classType) {
     // ----------------------------------------------------------------------
 
     /**
-     * Filter html tags into more benign text.
+     * Filter HTML tags into more benign text.
      *
      * @param line String
-     * @return html encoded line
+     * @return HTML-encoded line
      */
     private String htmlFilter(String line) {
         if (line == null || line.equals("")) {
diff --git a/pom.xml b/pom.xml
index 7d68ae52..b342c3af 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven-parent</artifactId>
-    <version>41</version>
+    <version>42</version>
     <relativePath />
   </parent>
 
@@ -76,8 +76,8 @@ under the License.
 
   <properties>
     <javaVersion>8</javaVersion>
-    <sitePluginVersion>3.12.1</sitePluginVersion>
     <slf4jVersion>1.7.36</slf4jVersion>
+    <sitePluginVersion>4.0.0-M15-SNAPSHOT</sitePluginVersion>
     <javadocPluginVersion>3.6.3</javadocPluginVersion>
     <maven.site.path>jxr-archives/jxr-LATEST</maven.site.path>
     <checkstyle.violation.ignore>None</checkstyle.violation.ignore>
@@ -126,25 +126,6 @@ under the License.
     </dependencies>
   </dependencyManagement>
 
-  <build>
-    <pluginManagement>
-      <!-- use the same plugin version in project and in IT tests -->
-      <!-- additionally versions upgrade will be tracked -->
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-javadoc-plugin</artifactId>
-          <version>${javadocPluginVersion}</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-site-plugin</artifactId>
-          <version>${sitePluginVersion}</version>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-
   <profiles>
     <profile>
       <id>reporting</id>