You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/07/30 19:58:51 UTC

[maven-jxr] branch doxia-2.0.0 created (now 3af2107)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch doxia-2.0.0
in repository https://gitbox.apache.org/repos/asf/maven-jxr.git


      at 3af2107  Prepare for Doxia 2.0.0

This branch includes the following new commits:

     new 3af2107  Prepare for Doxia 2.0.0

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-jxr] 01/01: Prepare for Doxia 2.0.0

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch doxia-2.0.0
in repository https://gitbox.apache.org/repos/asf/maven-jxr.git

commit 3af21071958ef2a3cd43f4e4d9c7e38bc9a4355e
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sat Jul 30 21:58:41 2022 +0200

    Prepare for Doxia 2.0.0
---
 maven-jxr-plugin/pom.xml                           |  34 +++--
 .../apache/maven/plugin/jxr/AbstractJxrReport.java |  97 ++-----------
 .../maven/plugin/jxr/AbstractJxrTestCase.java      | 159 +++++++++++++++++++++
 .../plugin/jxr/DependencyArtifactStubFactory.java  |  69 +++++++++
 .../org/apache/maven/plugin/jxr/JxrReportTest.java |  67 ++-------
 .../apache/maven/plugin/jxr/JxrTestReportTest.java |  16 +--
 .../ExcludeConfigurationMavenProjectStub.java      |   4 +-
 .../IncludeConfigurationMavenProjectStub.java      |   4 +-
 .../maven/plugin/jxr/stubs/JxrProjectStub.java     |  23 +++
 .../jxr/stubs/NoJavadocDirMavenProjectStub.java    |   2 +-
 .../jxr/stubs/TestSourceDirMavenProjectStub.java   |   6 +-
 .../aggregate-test-plugin-config.xml               |   3 +-
 .../default-configuration-plugin-config-4.xml      |   1 +
 .../default-configuration-plugin-config-6.xml      |   1 +
 .../default-configuration-plugin-config-7.xml      |   1 +
 .../default-configuration-plugin-config-8.xml      |   1 +
 .../default-configuration-plugin-config.xml        |   1 +
 .../exception-test-plugin-config.xml               |   1 +
 .../exclude-configuration-plugin-config.xml        |   1 +
 .../include-configuration-plugin-config.xml        |   1 +
 .../nojavadocdir-test-plugin-config.xml            |   1 +
 .../nojavadoclink-configuration-plugin-config.xml  |   1 +
 .../unit/pom-test/pom-test-plugin-config.xml       |   1 +
 .../testsourcedir-test-plugin-config.xml           |   1 +
 pom.xml                                            |   2 +-
 25 files changed, 326 insertions(+), 172 deletions(-)

diff --git a/maven-jxr-plugin/pom.xml b/maven-jxr-plugin/pom.xml
index 7feeb89..0a219e3 100644
--- a/maven-jxr-plugin/pom.xml
+++ b/maven-jxr-plugin/pom.xml
@@ -37,6 +37,7 @@ under the License.
 
   <properties>
     <mavenVersion>3.2.5</mavenVersion>
+    <aetherVersion>1.0.0.v20140518</aetherVersion>
   </properties>
 
   <prerequisites>
@@ -88,13 +89,7 @@ under the License.
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-impl</artifactId>
-      <version>3.1.0</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.codehaus.plexus</groupId>
-          <artifactId>plexus-container-default</artifactId>
-        </exclusion>
-      </exclusions>
+      <version>4.0.0-M2</version>
     </dependency>
 
     <!-- shared utils -->
@@ -126,6 +121,30 @@ under the License.
         </exclusion>
       </exclusions>
     </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.1</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
@@ -188,7 +207,6 @@ under the License.
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-invoker-plugin</artifactId>
             <configuration>
-              <projectsDirectory>src/it</projectsDirectory>
               <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
               <pomIncludes>
                 <pomInclude>*/pom.xml</pomInclude>
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 10f9467..dc7059d 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
@@ -31,22 +31,19 @@ import java.util.List;
 import java.util.Locale;
 import java.util.ResourceBundle;
 
-import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.jxr.JXR;
 import org.apache.maven.jxr.JavaCodeTransform;
 import org.apache.maven.jxr.JxrException;
 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.MojoExecutionException;
-import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.MavenReportException;
 import org.codehaus.plexus.languages.java.version.JavaVersion;
 import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.StringUtils;
 
 /**
@@ -60,31 +57,9 @@ import org.codehaus.plexus.util.StringUtils;
 public abstract class AbstractJxrReport
     extends AbstractMavenReport
 {
-    @Parameter( defaultValue = "${project}", readonly = true, required = true )
-    private MavenProject project;
 
-    @Component
-    private Renderer siteRenderer;
-
-    /**
-     * Output folder where the main page of the report will be generated. Note that this parameter is only relevant if
-     * the goal is run directly from the command line or from the default lifecycle. If the goal is run indirectly as
-     * part of a site generation, the output directory configured in the Maven Site Plugin will be used instead.
-     */
-    @Parameter( defaultValue = "${project.reporting.outputDirectory}", required = true )
-    private File outputDirectory;
-
-    /**
-     * File input encoding.
-     */
-    @Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
-    private String inputEncoding;
-
-    /**
-     * File output encoding.
-     */
-    @Parameter( property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}" )
-    private String outputEncoding;
+    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    private MavenSession session;
 
     /**
      * Title of window of the Xref HTML files.
@@ -171,18 +146,6 @@ public abstract class AbstractJxrReport
      */
     private JavaVersion javadocTemplatesVersion;
 
-    /**
-     * Gets the effective reporting output files encoding.
-     *
-     * @return The effective reporting output file encoding, never <code>null</code>: defaults to <code>UTF-8</code>
-     *         instead.
-     */
-    @Override
-    protected String getOutputEncoding()
-    {
-        return ( outputEncoding == null ) ? ReaderFactory.UTF_8 : outputEncoding;
-    }
-
     /**
      * Compiles the list of directories which contain source files that will be included in the JXR report generation.
      *
@@ -270,16 +233,10 @@ public abstract class AbstractJxrReport
         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 ) );
-        if ( StringUtils.isEmpty( inputEncoding ) )
-        {
-            String platformEncoding = System.getProperty( "file.encoding" );
-            getLog().warn( "File encoding has not been set, using platform encoding " + platformEncoding
-                               + ", i.e. build is platform dependent!" );
-        }
-        jxr.setInputEncoding( inputEncoding );
+        jxr.setInputEncoding( getInputEncoding() );
         jxr.setLocale( locale );
         jxr.setOutputEncoding( getOutputEncoding() );
         jxr.setRevision( "HEAD" );
@@ -457,21 +414,14 @@ public abstract class AbstractJxrReport
     }
 
     @Override
-    protected Renderer getSiteRenderer()
-    {
-        return siteRenderer;
-    }
-
-    @Override
-    protected String getOutputDirectory()
+    protected MavenProject getProject()
     {
-        return outputDirectory.getAbsolutePath();
+        return project;
     }
 
-    @Override
-    public MavenProject getProject()
+    protected MavenSession getSession()
     {
-        return project;
+        return session;
     }
 
     /**
@@ -500,37 +450,12 @@ public abstract class AbstractJxrReport
         return canGenerate;
     }
 
-    /*
-     * This is called for a standalone execution. Well, that's the claim. It also ends up called for the aggregate mojo,
-     * since that is configured as an execution, not in the reporting section, at least by some people on some days. We
-     * do NOT want the default behavior.
-     */
-    @Override
-    public void execute()
-        throws MojoExecutionException
-    {
-
-        if ( skip )
-        {
-            getLog().info( "Skipping JXR." );
-            return;
-        }
-
-        Locale locale = Locale.getDefault();
-        try
-        {
-            executeReport( locale );
-        }
-        catch ( MavenReportException e )
-        {
-            throw new MojoExecutionException( "Error generating JXR report", e );
-        }
-    }
-
     @Override
     protected void executeReport( Locale locale )
         throws MavenReportException
     {
+        System.out.println( localRepository );
+
         if ( skip )
         {
             getLog().info( "Skipping JXR." );
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
new file mode 100644
index 0000000..119fb02
--- /dev/null
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/AbstractJxrTestCase.java
@@ -0,0 +1,159 @@
+package org.apache.maven.plugin.jxr;
+
+/*
+ * 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 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.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.repository.LocalRepository;
+
+/**
+ * Abstract class to test reports generation.
+ */
+public abstract class AbstractJxrTestCase
+    extends AbstractMojoTestCase
+{
+    private ArtifactStubFactory artifactStubFactory;
+
+    /**
+     * The current project to be test.
+     */
+    private MavenProject testMavenProject;
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        // required for mojo lookups to work
+        super.setUp();
+
+        artifactStubFactory = new DependencyArtifactStubFactory( getTestFile( "target" ), true, false );
+        artifactStubFactory.getWorkingDir().mkdirs();
+    }
+
+    @Override
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+    }
+
+    /**
+     * 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 );
+        AbstractJxrReport mojo  = createReportMojo( goal, pluginXmlFile );
+        return generateReport( mojo, pluginXmlFile );
+    }
+
+    protected AbstractJxrReport createReportMojo( String goal, File pluginXmlFile )
+        throws Exception
+    {
+        AbstractJxrReport mojo = (AbstractJxrReport) 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( AbstractJxrReport 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 xrefTestDir, String fileName ) throws IOException
+    {
+        return new String( Files.readAllBytes( xrefTestDir.toPath().resolve( fileName ) ) );
+    }
+
+}
diff --git a/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/DependencyArtifactStubFactory.java b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/DependencyArtifactStubFactory.java
new file mode 100644
index 0000000..849d214
--- /dev/null
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/DependencyArtifactStubFactory.java
@@ -0,0 +1,69 @@
+package org.apache.maven.plugin.jxr;
+
+/* 
+ * 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/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 023938b..90b0a74 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
@@ -19,11 +19,9 @@ package org.apache.maven.plugin.jxr;
  * under the License.
  */
 
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
-import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Locale;
@@ -33,7 +31,7 @@ import java.util.Locale;
  * @author <a href="mailto:dennisl@apache.org">Dennis Lundberg</a>
  */
 public class JxrReportTest
-    extends AbstractMojoTestCase
+    extends AbstractJxrTestCase
 {
     /**
      * Test the plugin with original configuration
@@ -50,9 +48,7 @@ public class JxrReportTest
 
         FileUtils.copyDirectory( new File( resourcesDir, "javadoc-files" ), outputDir );
 
-        File testPom = new File( resourcesDir, "default-configuration-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "default-configuration/default-configuration-plugin-config.xml" );
 
         //check if xref files were generated
         assertTrue( new File( xrefDir, "allclasses-frame.html" ).exists() );
@@ -91,9 +87,7 @@ public class JxrReportTest
 
         FileUtils.copyDirectory( new File( resourcesDir, "javadoc-files" ), outputDir );
 
-        File testPom = new File( resourcesDir, "default-configuration-plugin-config-4.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "default-configuration/default-configuration-plugin-config-4.xml" );
 
         //check if xref files were generated
         assertTrue( new File( xrefDir, "allclasses-frame.html" ).exists() );
@@ -132,9 +126,7 @@ public class JxrReportTest
 
         FileUtils.copyDirectory( new File( resourcesDir, "javadoc-files" ), outputDir );
 
-        File testPom = new File( resourcesDir, "default-configuration-plugin-config-6.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "default-configuration/default-configuration-plugin-config-6.xml" );
 
         //check if xref files were generated
         assertTrue( new File( xrefDir, "allclasses-frame.html" ).exists() );
@@ -173,9 +165,7 @@ public class JxrReportTest
 
         FileUtils.copyDirectory( new File( resourcesDir, "javadoc-files" ), outputDir );
 
-        File testPom = new File( resourcesDir, "default-configuration-plugin-config-7.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "default-configuration/default-configuration-plugin-config-7.xml" );
 
         //check if xref files were generated
         assertTrue( new File( xrefDir, "allclasses-frame.html" ).exists() );
@@ -218,9 +208,7 @@ public class JxrReportTest
 
         FileUtils.copyDirectory( new File( resourcesDir, "javadoc-files" ), outputDir );
 
-        File testPom = new File( resourcesDir, "default-configuration-plugin-config-8.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "default-configuration/default-configuration-plugin-config-8.xml" );
 
         //check if xref files were generated
         assertTrue( new File( xrefDir, "allclasses-frame.html" ).exists() );
@@ -252,10 +240,7 @@ public class JxrReportTest
     public void testNoJavadocLink()
         throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "nojavadoclink-configuration/nojavadoclink-configuration-plugin-config.xml" );
 
         File xrefDir = new File( getBasedir(), "target/test/unit/nojavadoclink-configuration/target/site/xref" );
 
@@ -296,10 +281,7 @@ public class JxrReportTest
     public void testAggregate()
         throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/aggregate-test/aggregate-test-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "aggregate-test/aggregate-test-plugin-config.xml" );
 
         File xrefDir = new File( getBasedir(), "target/test/unit/aggregate-test/target/site/xref" );
 
@@ -314,7 +296,6 @@ public class JxrReportTest
         assertTrue( new File( xrefDir, "aggregate/test/submodule2/package-summary.html" ).exists() );
         assertTrue( new File( xrefDir, "aggregate/test/submodule2/Submodule2App.html" ).exists() );
         assertTrue( new File( xrefDir, "aggregate/test/submodule2/Submodule2AppSample.html" ).exists() );
-
     }
 
     /**
@@ -325,10 +306,7 @@ public class JxrReportTest
     public void testNoJavadocDir()
         throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/nojavadocdir-test/nojavadocdir-test-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "nojavadocdir-test/nojavadocdir-test-plugin-config.xml" );
 
         File xrefDir = new File( getBasedir(), "target/test/unit/nojavadocdir-test/target/site/xref" );
 
@@ -338,7 +316,6 @@ public class JxrReportTest
 
         str = readFile( xrefDir, "nojavadocdir/test/App.html" );
         assertTrue( str.toLowerCase( Locale.US ).contains( "/apidocs/nojavadocdir/test/app.html" ) );
-
     }
 
     /**
@@ -349,10 +326,7 @@ public class JxrReportTest
     public void testExclude()
         throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/exclude-configuration/exclude-configuration-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "exclude-configuration/exclude-configuration-plugin-config.xml" );
 
         Path xrefDir = new File( getBasedir(), "target/test/unit/exclude-configuration/target/site/xref" ).toPath();
 
@@ -371,10 +345,7 @@ public class JxrReportTest
     public void testInclude()
         throws Exception
     {
-        File testPom = new File( getBasedir(),
-                "src/test/resources/unit/include-configuration/include-configuration-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "include-configuration/include-configuration-plugin-config.xml" );
 
         Path xrefDir = new File( getBasedir(), "target/test/unit/include-configuration/target/site/xref" ).toPath();
 
@@ -389,10 +360,7 @@ public class JxrReportTest
     {
         try
         {
-            File testPom = new File( getBasedir(),
-                    "src/test/resources/unit/default-configuration/exception-test-plugin-config.xml" );
-            JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-            mojo.execute();
+            generateReport( "jxr", "default-configuration/exception-test-plugin-config.xml" );
 
             fail( "Must throw exception" );
         }
@@ -410,18 +378,9 @@ public class JxrReportTest
     public void testPom()
         throws Exception
     {
-        File testPom = new File( getBasedir(), "src/test/resources/unit/pom-test/pom-test-plugin-config.xml" );
-        JxrReport mojo = (JxrReport) lookupMojo( "jxr", testPom );
-        mojo.execute();
+        generateReport( "jxr", "pom-test/pom-test-plugin-config.xml" );
 
         assertFalse( new File( getBasedir(), "target/test/unit/pom-test" ).exists() );
     }
 
-    /**
-     * Read the contents of the specified file object into a string
-     */
-    private String readFile( File xrefTestDir, String fileName ) throws IOException
-    {
-        return new String( Files.readAllBytes( xrefTestDir.toPath().resolve( fileName ) ) );
-    }
 }
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 98bd456..c70eab2 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
@@ -23,13 +23,11 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 
-import org.apache.maven.plugin.testing.AbstractMojoTestCase;
-
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  */
 public class JxrTestReportTest
-    extends AbstractMojoTestCase
+    extends AbstractJxrTestCase
 {
     /**
      * Method to test when the source dir is the test source dir
@@ -39,10 +37,7 @@ public class JxrTestReportTest
     public void testSourceDir()
         throws Exception
     {
-        File testPom =
-            new File( getBasedir(), "src/test/resources/unit/testsourcedir-test/testsourcedir-test-plugin-config.xml" );
-        JxrTestReport mojo = (JxrTestReport) lookupMojo( "test-jxr", testPom );
-        mojo.execute();
+        generateReport( "test-jxr", "testsourcedir-test/testsourcedir-test-plugin-config.xml" );
 
         File xrefTestDir = new File( getBasedir(), "target/test/unit/testsourcedir-test/target/site/xref-test" );
 
@@ -65,11 +60,4 @@ public class JxrTestReportTest
         assertFalse( str.toLowerCase().contains( "/apidocs/testsourcedir/test/App.html\"".toLowerCase() ) );
     }
 
-    /**
-     * Read the contents of the specified file object into a string
-     */
-    private String readFile( File xrefTestDir, String fileName ) throws IOException
-    {
-        return new String( Files.readAllBytes( xrefTestDir.toPath().resolve( fileName ) ) );
-    }
 }
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 0eec0e3..24c0fa0 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
@@ -23,7 +23,6 @@ import org.apache.maven.artifact.Artifact;
 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;
 
 import java.io.FileReader;
 import java.util.ArrayList;
@@ -32,7 +31,8 @@ import java.util.List;
 /**
  * @author <a href="mailto:dennisl@apache.org">Dennis Lundberg</a>
  */
-public class ExcludeConfigurationMavenProjectStub extends MavenProjectStub
+public class ExcludeConfigurationMavenProjectStub
+    extends JxrProjectStub
 {
     private List<ReportPlugin> reportPlugins = new ArrayList<>();
 
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 3b35488..10a1623 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
@@ -23,7 +23,6 @@ import org.apache.maven.artifact.Artifact;
 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;
 
 import java.io.FileReader;
 import java.util.ArrayList;
@@ -32,7 +31,8 @@ import java.util.List;
 /**
  * @author <a href="mailto:dennisl@apache.org">Dennis Lundberg</a>
  */
-public class IncludeConfigurationMavenProjectStub extends MavenProjectStub
+public class IncludeConfigurationMavenProjectStub
+    extends JxrProjectStub
 {
     private List<ReportPlugin> reportPlugins = new ArrayList<>();
 
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
new file mode 100644
index 0000000..b2cf1e9
--- /dev/null
+++ b/maven-jxr-plugin/src/test/java/org/apache/maven/plugin/jxr/stubs/JxrProjectStub.java
@@ -0,0 +1,23 @@
+package org.apache.maven.plugin.jxr.stubs;
+
+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 JxrProjectStub
+    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/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 c4c56e6..0448f95 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
@@ -33,7 +33,7 @@ import java.util.List;
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  */
 public class NoJavadocDirMavenProjectStub
-    extends MavenProjectStub
+    extends JxrProjectStub
 {
     private List<ReportPlugin> reportPlugins;
 
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 69ca4e6..b441285 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
@@ -22,7 +22,6 @@ package org.apache.maven.plugin.jxr.stubs;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
 
 import java.io.FileReader;
 import java.util.ArrayList;
@@ -32,9 +31,9 @@ import java.util.List;
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  */
 public class TestSourceDirMavenProjectStub
-    extends MavenProjectStub
+    extends JxrProjectStub
 {
-    
+
     public TestSourceDirMavenProjectStub()
     {
         MavenXpp3Reader pomReader = new MavenXpp3Reader();
@@ -67,4 +66,5 @@ public class TestSourceDirMavenProjectStub
         setArtifact( artifact );
 
     }
+
 }
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 6236fc9..27bac58 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
@@ -37,7 +37,7 @@ under the License.
           <docTitle>Maven Jxr Plugin Aggregate Test 1.0-SNAPSHOT Reference</docTitle>
           <inputEncoding>ISO-8859-1</inputEncoding>
           <outputEncoding>ISO-8859-1</outputEncoding>
-          <sourceDirs>            
+          <sourceDirs>
             <value>${basedir}/src/test/resources/unit/aggregate-test/submodule1</value>
             <value>${basedir}/src/test/resources/unit/aggregate-test/submodule2</value>
           </sourceDirs>
@@ -51,6 +51,7 @@ 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 124f7aa..bf302a1 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
@@ -44,6 +44,7 @@ under the License.
           <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 5f0edb2..eac7aee 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
@@ -44,6 +44,7 @@ under the License.
           <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 db16d9d..dbe4d6d 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
@@ -44,6 +44,7 @@ under the License.
           <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 8be96ac..9e33092 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
@@ -44,6 +44,7 @@ under the License.
           <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 6841a75..1f4769d 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
@@ -46,6 +46,7 @@ under the License.
           <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 1ac1e93..cd37da4 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
@@ -46,6 +46,7 @@ under the License.
           <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 cc61d9f..d136487 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
@@ -49,6 +49,7 @@ 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 580c19c..d0cfaed 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
@@ -49,6 +49,7 @@ 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 351f7aa..0c3a0b2 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
@@ -46,6 +46,7 @@ under the License.
           <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 6fae9b8..ba569bc 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
@@ -46,6 +46,7 @@ under the License.
           <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 ae65ab4..257aa0b 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,6 +41,7 @@ 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 6f08c17..23bccd9 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
@@ -44,6 +44,7 @@ under the License.
           <bottom>Copyright 2006 Apache Foundation</bottom>
           <javadocVersion>1.4</javadocVersion>
           <stylesheet>stylesheet.css</stylesheet>
+          <localRepository>${localRepository}</localRepository>
         </configuration>
       </plugin>
     </plugins>
diff --git a/pom.xml b/pom.xml
index af3c055..0e3e8ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@ under the License.
 
   <properties>
     <javaVersion>8</javaVersion>
-    <sitePluginVersion>3.12.0</sitePluginVersion>
+    <sitePluginVersion>4.0.0-M3</sitePluginVersion>
     <javadocPluginVersion>3.4.0</javadocPluginVersion>
     <maven.site.path>jxr-archives/jxr-LATEST</maven.site.path>
     <checkstyle.violation.ignore>None</checkstyle.violation.ignore>