Merge remote-tracking branch 'origin/master' into feature/RAT-259

Fetch changes due to r0.15
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 78dd333..8526323 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -31,17 +31,19 @@
         os: [ubuntu-latest, windows-latest]
 # RAT-296: disable JDK10 due to
 # Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
-        java: [8, 11, 12, 13, 14, 15]
+#
+# Java 17 disabled, because we are running into https://bugs.openjdk.java.net/browse/JDK-8270866
+        java: [8, 11, 12, 13, 14, 15, 16]
       fail-fast: false
 
     runs-on: ${{ matrix.os }}
 
     steps:
       - name: Checkout
-        uses: actions/checkout@v2
+        uses: actions/checkout@v3
 
       - name: Set up JDK
-        uses: actions/setup-java@v2.5.0
+        uses: actions/setup-java@v3.4.1
         with:
           distribution: adopt
           java-version: ${{ matrix.java }}
@@ -50,3 +52,8 @@
       - name: Build with Maven
         run: mvn -e -B -V clean package site
 
+# as of 20220505:  Invalid workflow file
+# The workflow is not valid. .github/workflows/maven.yml (Line: 55, Col: 1): Unexpected value 'notifications'
+#notifications:
+#   jobs: commits@creadur.apache.org
+
diff --git a/.travis.yml b/.travis.yml
index 332292a..1b56d79 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,13 +1,9 @@
 language: java
-dist: trusty
+dist: focal 
 sudo: required
 
 jobs:
     include:
-        - name: "Java 8"
-          jdk: openjdk8
-          script: mvn -e -B -V clean package site
-
-        - name: "Java 14"
-          jdk: openjdk14
+        - name: "Java 16"
+          jdk: openjdk16
           script: mvn -e -B -V clean package site
diff --git a/Jenkinsfile b/Jenkinsfile
index 6839e75..4ff77fb 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -41,7 +41,7 @@
 
     tools {
         maven 'maven_3_latest'
-        jdk 'jdk_14_latest'
+        jdk 'jdk_16_latest'
     }
 
     options {
diff --git a/README.md b/README.md
index 33770ea..c328362 100644
--- a/README.md
+++ b/README.md
@@ -65,4 +65,4 @@
 
 If you want to contribute, feel free to branch from master and provide a pull request via Github.
 You should file a contributor license agreement in order to properly handle your input.
-Apart from that you could file an issue in ASF's Jira under the project "RAT".
+Apart from that you can file an issue in ASF's Jira: [project RAT](https://issues.apache.org/jira/browse/RAT)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 4ce87a3..b1d93d6 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -1,7 +1,7 @@
-              Apache Creadur Rat 0.13
+              Apache Creadur Rat 0.15
                   RELEASE NOTES
 
-The Apache Creadur Rat team is pleased to announce the release of Apache Creadur Rat 0.13
+The Apache Creadur Rat team is pleased to announce the release of Apache Creadur Rat 0.15
 
 Apache Rat is a release audit tool. It improves accuracy and efficiency when checking
 releases. It is heuristic in nature: making guesses about possible problems. It
@@ -15,25 +15,30 @@
 Apache Rat is developed by the Apache Creadur project, a language and build
 agnostic home for software distribution comprehension and audit tools.
 
+This release fixes a warning during site builds and updates various dependencies.
+
 Changes in this version include:
 
-New features:
-o RAT-228:  Fixing broken Ant unit test setup and making tests run more deterministic. Thanks to Romain Manni-Bucau.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.12 to get bugfixes and newer JDK support.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.11 to get bugfixes and newer JDK support.
-o RAT-245:  Update to latest available and compatible Apache ANT 1.9.10 due to CVE-2017-5645.
-o RAT-243:  Add .checkstyle to Eclipse default exclusions. Thanks to Matthew Ouyang.
-o RAT-241:  Reduce default log level of used exclusions to debug, only print totals into the maven log like includes. Thanks to Andrew Gaul.
-o RAT-233:  Recognize XML-based .Net Core xproj files. Thanks to Stefan Bodewig.
-o RAT-226:  Update to latest available and compatible Apache ANT 1.9.9.
-
 Fixed Bugs:
-o RAT-242:  Use UTF-8 as default encoding for RAT Ant reports. Thanks to Matthias Bläsing.
-o RAT-234:  Do not treat TypeScript files as binary. Thanks to ajbanck.
-o RAT-240:  Overhauled CLI module to allow file based exclusions with wildcards and explicit file names.
-o RAT-222:  Download section does not work if SNAPSHOT is deployed, add download of previous RAT release.
-o RAT-224:  Fixed example on webpage abozt usage of custom licenses. Thanks to John Patrick.
-o RAT-223:  Add support for Golang and Perl module files. Thanks to Eric Friedrich.
+o RAT-309:  Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy. Thanks to Michael Osipov, Gary Gregory.
+o RAT-309:  Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+o RAT-306:  Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+o RAT-307:  Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+
+Changes:
+o RAT-305:  Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-javadoc-plugin from 3.4.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-jxr-plugin from 3.2.0 to 3.3.0. Thanks to dependabot.
+o RAT-305:  Update animal-sniffer-maven-plugin from 1.21 to 1.22. Thanks to dependabot.
+o RAT-305:  Update maven-site-plugin from 3.12.0 to 3.12.1. Thanks to dependabot.
+o RAT-305:  Update maven-pmd-plugin from 3.16.0 to 3.18.0. Thanks to dependabot.
+o RAT-305:  Update mockito-core from 4.6.0 to 4.7.0. Thanks to dependabot.
+o RAT-305:  Update extra-enforcer-rules from 1.5.1 to 1.6.1. Thanks to dependabot.
+o RAT-305:  Update Apache parent pom from 26 to 27. Thanks to dependabot.
+o RAT-305:  Update wagon-ssh from 3.5.1 to 3.5.2. Thanks to dependabot.
+o RAT-305:  Update maven-enforcer-plugin from 3.0.0 to 3.1.0. Thanks to dependabot.
+o RAT-305:  Update actions/setup-java from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-310:  Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
 
 
 Historical list of changes: https://creadur.apache.org/rat/changes-report.html
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 85206e6..c88e22a 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,3 +1,90 @@
+Rat 0.15
+========
+This release fixes a warning during site builds and updates various dependencies.
+
+Fixed Bugs:
+o RAT-309:  Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy. Thanks to Michael Osipov, Gary Gregory.
+o RAT-309:  Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+o RAT-306:  Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+o RAT-307:  Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+
+Changes:
+o RAT-305:  Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-javadoc-plugin from 3.4.0 to 3.4.1. Thanks to dependabot.
+o RAT-305:  Update maven-jxr-plugin from 3.2.0 to 3.3.0. Thanks to dependabot.
+o RAT-305:  Update animal-sniffer-maven-plugin from 1.21 to 1.22. Thanks to dependabot.
+o RAT-305:  Update maven-site-plugin from 3.12.0 to 3.12.1. Thanks to dependabot.
+o RAT-305:  Update maven-pmd-plugin from 3.16.0 to 3.18.0. Thanks to dependabot.
+o RAT-305:  Update mockito-core from 4.6.0 to 4.7.0. Thanks to dependabot.
+o RAT-305:  Update extra-enforcer-rules from 1.5.1 to 1.6.1. Thanks to dependabot.
+o RAT-305:  Update Apache parent pom from 26 to 27. Thanks to dependabot.
+o RAT-305:  Update wagon-ssh from 3.5.1 to 3.5.2. Thanks to dependabot.
+o RAT-305:  Update maven-enforcer-plugin from 3.0.0 to 3.1.0. Thanks to dependabot.
+o RAT-305:  Update actions/setup-java from 3.3.0 to 3.4.1. Thanks to dependabot.
+o RAT-310:  Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
+
+Rat 0.14
+========
+This release contains dependency updates, bugfixes and many improvements apart from infrastructure updates at ASF.
+
+New features:
+* RAT-288:  Adapt logging output to be more compliant with future Maven versions as debug is deprecated and verbose is the recommended way to go. Thanks to Michael Osipov.
+* RAT-297:  Update maven-reporting-api from 3.0 to 3.1.0 and remove usage of deprecated Sink API. Thanks to Michael Osipov.
+* RAT-289:  Enable dependabot integration - write access is forbidden, but email alerts and pull requests should be ok.
+* RAT-279:  Migrate vom Travis CI.org to Travis-ci.com.
+* RAT-271:  Move all Creadur projects to new Jenkins infrastructure at ASF and migrate from Subversion to Gitbox/Github. Please update your repository URLs and use the new default branch master in all projects.
+* RAT-270:  Change default behaviour to output erroneous files to console. Can be disabled by setting rat.consoleOutput to false.
+* RAT-266:  Add .factorypath to Eclipse-default exclusions. Thanks to Michael Osipov.
+* RAT-254:  Properly finish move to gitbox/github, get rid of SVN references and adapt main branch to master and fix all Jenkins build jobs for RAT.
+* RAT-244:  Update compiler level to 1.7 to allow building with more recent JDKs. Update plugins and dependencies to more modern versions to fix security issues (CVE-warnings).
+* RAT-212:  Add alternative https URLs in Apache License, Version 2.0 to allow automatic recognition as valid ASF2.0. Thanks to Niels Basjes.
+* RAT-250:  Update to latest available and compatible Apache ANT 1.9.14 to get bugfixes.
+o INFRA-17348: SCM repository has been moved from svn.apache.org (Subversion) to gitbox.apache.org (Git)
+
+Fixed Bugs:
+* RAT-290:  Update maven-jxr-plugin from 2.5 to 3.2.0. Thanks to dependabot.
+* RAT-290:  Update maven-antrun-plugin from 3.0.0 to 3.1.1. Thanks to dependabot.
+* RAT-290:  Update github actions/checkout from 2 to 3. Thanks to dependabot.
+* RAT-290:  Update github actions/setup-java from 2.5.0 to 3.3.0. Thanks to dependabot.
+* RAT-290:  Update maven-pmd-plugin from 3.14.0 to 3.16.0. Thanks to dependabot.
+* RAT-290:  Update maven-javadoc-plugin from 3.3.1 to 3.4.0. Thanks to dependabot.
+* RAT-290:  Update maven-compiler-plugin from 3.8.1 to 3.10.1. Thanks to dependabot.
+* RAT-290:  Update wagon-ssh from 3.5.0 to 3.5.1. Thanks to dependabot.
+* RAT-290:  Update maven-site-plugin from 3.9.1 to 3.12.0. Thanks to dependabot.
+* RAT-290:  Update maven-project-info-reports-plugin from 3.1.1 to 3.3.0. Thanks to dependabot.
+* RAT-290:  Update mockito-core from 3.11.2 to 4.6.0. Thanks to dependabot.
+* RAT-290:  Update ASF parent from 23 to 26. Thanks to dependabot.
+* RAT-273:  Some tests were based on the assumption, that the value of file.encoding
+            can be changed on runtime. (Won't work nowadays, beginning with Java 16.)
+            Removed this assumption in favour of a proper surefire configuration.
+* RAT-273:  Workaround for an incompatibility in the java.io.LineNumberReader, which is
+            being replaced by the org.apache.rat.header.LineNumberReader.
+* RAT-290:  Update animal-sniffer-maven-plugin from 1.20 to 1.21. Thanks to Jin Xu/Xeno Amess.
+* RAT-296:  Use Github Actions for matrix builds on Windows and ubuntu with JDK 8,11,12,13,14,15. Simplify Travis integration to avoid dockerhub-related build failures.
+* RAT-274:  Update to latest Apache Ant 1.10.12.
+* RAT-291:  Fix links to Travis builds for all creadur projects.
+* RAT-290:  Update maven-dependency-plugin from 3.1.1 to 3.2.0. Thanks to dependabot.
+* RAT-290:  Update plexus-utils from 3.0.21 to 3.4.1. Thanks to dependabot.
+* RAT-290:  Update commons-cli from 1.4 to 1.5.0. Thanks to dependabot.
+* RAT-290:  Update maven-plugin-annotation and maven-plugin-plugin from 3.6.1 to 3.6.2. Thanks to dependabot.
+* RAT-275:  Update to doxia 1.11.1 in order to get CVE-2020-13956-httpclient problem fixes in doxia.
+* RAT-283:  Update plugin versions and dependencies in order to run properly with Java8 as minimal compiler level.
+* RAT-286:  Update to maven-plugin-plugin v3.6.1 in order to circumvent error during maven site builds.
+* RAT-285:  Update to latest Apache Ant 1.10.11 in order to fix issues related to dependency commons-compress in Ant itself.
+* RAT-207:  Properly report thread-safeness to Maven. Thanks to Xavier Dury.
+* RAT-281:  Update to latest Commons IO to fix CVE-2021-29425 (Moderate severity).
+* RAT-274:  Update to latest Apache Ant 1.10.10.
+* RAT-277:  Update to junit 4.13.1 to fix CVE-2020-15250.
+* RAT-158:  Update to new ASF parent 23 in order to get rid of doxia version management that generated warnings.
+* RAT-274:  Update to latest Apache Ant 1.10.9 to fix CVE-2020-11979. Update to JDK8 as minimal version/compiler version.
+* RAT-269:  Update to latest Apache Ant to fix CVE-2020-1945.
+* RAT-268:  Allow handling of pom-file-only projects by not assuming that all modules are in directories. Thanks to Robert Scholte.
+* RAT-267:  Report ignored lines from exclusion file to stderr instead of std to not generate erroneous JSON. Thanks to Fabio Utzig.
+* RAT-262:  Treat JSON data as binary to avoid reports of missing licenses.
+* RAT-260:  Change to docker image when building on Travis to avoid JDK version mixup in traditional build setup. Thanks to Kamil BreguĊ‚a.
+* RAT-258:  Update to latest commons-compress to fix CVE-2019-12402.
+* RAT-257:  Adapt help text for CLI usage of RAT.
+
 Rat 0.13
 =========
 
diff --git a/apache-rat-api/pom.xml b/apache-rat-api/pom.xml
index fd3df6d..bdb30bf 100644
--- a/apache-rat-api/pom.xml
+++ b/apache-rat-api/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <packaging>jar</packaging>
 
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
index 739806c..3883e90 100644
--- a/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/LicenseFamilyBuilderTest.java
@@ -19,8 +19,8 @@
 package org.apache.rat.api.domain;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
 
 import org.junit.Test;
 
diff --git a/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
index bf7c7bd..9270510 100644
--- a/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
+++ b/apache-rat-api/src/test/java/org/apache/rat/api/domain/RatLicenseFamilyTest.java
@@ -30,7 +30,7 @@
 import static org.apache.rat.api.domain.RatLicenseFamily.W3C;
 import static org.apache.rat.api.domain.RatLicenseFamily.W3C_DOCUMENTATION;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.junit.Test;
 
diff --git a/apache-rat-core/pom.xml b/apache-rat-core/pom.xml
index 2bcd5a3..60f4de0 100644
--- a/apache-rat-core/pom.xml
+++ b/apache-rat-core/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat-core</artifactId>
   <packaging>jar</packaging>
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java b/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
index f01dc0f..ac5d31a 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/FilteringSequenceFactory.java
@@ -39,6 +39,10 @@
     }
 
     public CharSequence filter(Reader reader) throws IOException {
+    	return filter(new LineNumberReader(reader));
+    }
+
+    public CharSequence filter(LineNumberReader reader) throws IOException {
         buffer.clear();
         boolean eof = false;
         while(!eof) {
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java b/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
index 288bc25..ac720bf 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/HeaderMatcher.java
@@ -19,7 +19,6 @@
 package org.apache.rat.header;
 
 import java.io.IOException;
-import java.io.LineNumberReader;
 import java.io.Reader;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -60,7 +59,6 @@
             lines = -1;
         }
         if (headers != null) {
-            final int length = headers.length;
             for (final HeaderBean headerBean : headers) {
                 if (headerBean != null) {
                     final Pattern headerPattern = headerBean.getHeaderPattern();
diff --git a/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java b/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java
new file mode 100644
index 0000000..d5f150b
--- /dev/null
+++ b/apache-rat-core/src/main/java/org/apache/rat/header/LineNumberReader.java
@@ -0,0 +1,64 @@
+/*

+ * 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.                                           *

+ */ 

+package org.apache.rat.header;

+

+import java.io.IOException;

+import java.io.Reader;

+

+/** Replacement for {@link java.io.LineNumberReader}. This class

+ * provides a workaround for an incompatibility in the

+ * {@link java.io.LineNumberReader}: If the last line in a file

+ * isn't terminated with LF, or CR, or CRLF, then that line

+ * is counted in Java 16, and beyond, but wasn't counted before.

+ * This implementation is compatible with the latter variant,

+ * thus providing upwards compatibility for RAT.

+ */

+public class LineNumberReader {

+	private final Reader parent;

+	private boolean previousCharWasCR = false;

+	private int lineNumber = 0;

+

+	public LineNumberReader(Reader pReader) {

+		parent = pReader;

+	}

+

+	public int read() throws IOException {

+		final int c = parent.read();

+		switch(c) {

+		case 13:

+			previousCharWasCR = true;

+			++lineNumber;

+			break;

+		case 10:

+			if (!previousCharWasCR) {

+				++lineNumber;

+			}

+			previousCharWasCR = false;

+			break;

+		default:

+			previousCharWasCR = false;

+			break;

+		}

+		return c;

+	}

+

+	public int getLineNumber() {

+		return lineNumber;

+	}

+}

diff --git a/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java b/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
index 1095660..d304752 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/report/xml/writer/impl/base/XmlWriter.java
@@ -18,13 +18,13 @@
  */
 package org.apache.rat.report.xml.writer.impl.base;
 
-import org.apache.commons.collections4.ArrayStack;
 import org.apache.rat.report.xml.writer.IXmlWriter;
 import org.apache.rat.report.xml.writer.InvalidXmlException;
 import org.apache.rat.report.xml.writer.OperationNotAllowedException;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayDeque;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
@@ -400,7 +400,7 @@
     }
 
     private final Writer writer;
-    private final ArrayStack elementNames;
+    private final ArrayDeque elementNames;
     private final Set<CharSequence> currentAttributes = new HashSet<>();
 
     boolean elementsWritten = false;
@@ -409,7 +409,7 @@
 
     public XmlWriter(final Writer writer) {
         this.writer = writer;
-        this.elementNames = new ArrayStack();
+        this.elementNames = new ArrayDeque<CharSequence>();
     }
 
     /**
diff --git a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
index 7bfd068..721fa06 100644
--- a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
+++ b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherTest.java
@@ -30,13 +30,11 @@
 
 public class HeaderMatcherTest {
 
-    private int capacity;
     private HeaderMatcher matcher;
     private SimpleCharFilter filter;
 
     @Before
     public void setUp() throws Exception {
-        capacity = 20;
         filter = new SimpleCharFilter();
         matcher = new HeaderMatcher(filter, 20);
     }
diff --git a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
index ce5e9db..d41b95a 100644
--- a/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
+++ b/apache-rat-core/src/test/java/org/apache/rat/header/HeaderMatcherWithBeansTest.java
@@ -30,7 +30,6 @@
 
 public class HeaderMatcherWithBeansTest {
 
-    private int capacity;
     private HeaderMatcher matcher;
     private SimpleCharFilter filter;
     private HeaderBean[] beans;
@@ -43,7 +42,6 @@
                 new HeaderBean()
             };
         this.beans = beans;
-        capacity = 20;
         filter = new SimpleCharFilter();
         matcher = new HeaderMatcher(filter, 20, beans);
     }
diff --git a/apache-rat-plugin/pom.xml b/apache-rat-plugin/pom.xml
index 783df94..c24e75f 100644
--- a/apache-rat-plugin/pom.xml
+++ b/apache-rat-plugin/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <artifactId>apache-rat-project</artifactId>
     <groupId>org.apache.rat</groupId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
   <artifactId>apache-rat-plugin</artifactId>
@@ -125,6 +125,14 @@
         		</lifecycleMappingMetadata>
         	</configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <forkCount>1</forkCount>
+            <argLine>-Dfile.encoding=ISO-8859-1</argLine>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
@@ -229,13 +237,23 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven.doxia</groupId>
+      <artifactId>doxia-integration-tools</artifactId>
+      <version>${doxiaSitetoolsVersion}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.doxia</groupId>
       <artifactId>doxia-site-renderer</artifactId>
       <version>${doxiaSitetoolsVersion}</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.reporting</groupId>
       <artifactId>maven-reporting-api</artifactId>
-      <version>3.0</version>
+      <version>3.1.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-utils</artifactId>
+      <version>3.3.4</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
@@ -246,7 +264,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
-      <version>3.4.1</version>
+      <version>3.4.2</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
diff --git a/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java b/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
index 6d451f8..7321838 100644
--- a/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
+++ b/apache-rat-plugin/src/main/java/org/apache/rat/mp/AbstractRatMojo.java
@@ -140,7 +140,7 @@
      */
     @Parameter(property="rat.includesFileCharset", defaultValue="${project.build.sourceEncoding}")
     private String includesFileCharset;
-    
+
     /**
      * Specifies files, which are excluded in the report. By default, no files
      * are excluded.
@@ -236,7 +236,7 @@
      * Holds the maven-internal project to allow resolution of artifact properties during mojo runs.
      */
     @Parameter(defaultValue = "${project}", required = true, readonly = true)
-    private MavenProject project;
+    protected MavenProject project;
 
     /**
      * @return Returns the Maven project.
@@ -314,7 +314,7 @@
         } else {
             getLog().info(
                     files.length
-                            + " resources included (use -debug for more details)");
+                            + " resources included");
             if (getLog().isDebugEnabled()) {
                 for (final String resource : files) {
                     getLog().debug(" - included " + resource);
@@ -400,13 +400,13 @@
     	}
     	return patterns;
     }
-    
+
     private void setExcludes(DirectoryScanner ds) throws MojoExecutionException {
         final List<String> excludeList = mergeDefaultExclusions();
         if (excludes == null || excludes.length == 0) {
             getLog().info("No excludes explicitly specified.");
         } else {
-            getLog().info(excludes.length + " explicit excludes (use -debug for more details).");
+            getLog().info(excludes.length + " explicit excludes.");
         	for (final String exclude : excludes) {
                 getLog().debug("Exclude: " + exclude);
             }
@@ -454,7 +454,7 @@
         } else {
             getLog().info(
                     results.size()
-                            + " implicit excludes (use -debug for more details).");
+                            + " implicit excludes.");
             for (final String exclude : results) {
                 getLog().debug("Implicit exclude: " + exclude);
             }
diff --git a/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java b/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
index 432d373..04d7d59 100644
--- a/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
+++ b/apache-rat-plugin/src/main/java/org/apache/rat/mp/RatReportMojo.java
@@ -20,149 +20,329 @@
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.doxia.site.decoration.Body;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.sink.SinkFactory;
+import org.apache.maven.doxia.sink.impl.SinkEventAttributeSet;
 import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.site.decoration.Skin;
 import org.apache.maven.doxia.siterenderer.Renderer;
 import org.apache.maven.doxia.siterenderer.RendererException;
 import org.apache.maven.doxia.siterenderer.RenderingContext;
 import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.doxia.tools.SiteTool;
+import org.apache.maven.doxia.tools.SiteToolException;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.reporting.MavenReport;
+import org.apache.maven.reporting.MavenMultiPageReport;
 import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.shared.utils.WriterFactory;
 import org.apache.rat.Defaults;
-import org.codehaus.doxia.sink.Sink;
+import org.codehaus.plexus.util.ReaderFactory;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
+import java.io.*;
+import java.nio.file.Files;
+import java.util.*;
+
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 
 
 /**
  * Generates a report with Rat's output.
  */
-@SuppressWarnings("deprecation") // MavenReport invokes the deprecated Sink implementation
 @Mojo(name = "rat", requiresDependencyResolution = ResolutionScope.TEST, threadSafe = true)
-public class RatReportMojo extends AbstractRatMojo implements MavenReport {
-    public static final String DOT_HTML = ".html";
-    @Component
-    private Renderer siteRenderer;
-
-    @Component
-    private ArtifactFactory factory;
-
-    @Component
-    private ArtifactResolver resolver;
+public class RatReportMojo extends AbstractRatMojo implements MavenMultiPageReport {
 
     /**
-     * Specifies the directory where the report will be generated
+     * The output directory for the report. Note that this parameter is only evaluated if the goal is run directly from
+     * the command line. If the goal is run indirectly as part of a site generation, the output directory configured in
+     * the Maven Site Plugin is used instead.
      */
-    @Parameter(defaultValue = "${project.reporting.outputDirectory}", required = true)
-    private File outputDirectory;
-
-    @Parameter(defaultValue = "${localRepository}", required = true, readonly = true)
-    private ArtifactRepository localRepository;
+    @Parameter(defaultValue = "${project.reporting.outputDirectory}", readonly = true, required = true)
+    protected File outputDirectory;
 
     /**
-     * Returns the skins artifact file.
+     * Specifies the input encoding.
+     */
+    @Parameter(property = "encoding", defaultValue = "${project.build.sourceEncoding}", readonly = true)
+    private String inputEncoding;
+
+    /**
+     * Specifies the output encoding.
+     */
+    @Parameter(property = "outputEncoding", defaultValue = "${project.reporting.outputEncoding}", readonly = true)
+    private String outputEncoding;
+
+    /**
+     * The local repository.
+     */
+    @Parameter(defaultValue = "${localRepository}", readonly = true, required = true)
+    protected ArtifactRepository localRepository;
+
+    /**
+     * Remote repositories used for the project.
+     */
+    @Parameter(defaultValue = "${project.remoteArtifactRepositories}", readonly = true, required = true)
+    protected List<ArtifactRepository> remoteRepositories;
+
+    /**
+     * SiteTool.
+     */
+    @Component
+    protected SiteTool siteTool;
+
+    /**
+     * Doxia Site Renderer component.
+     */
+    @Component
+    protected Renderer siteRenderer;
+
+    /**
+     * The current sink to use
+     */
+    private Sink sink;
+
+    /**
+     * The sink factory to use
+     */
+    private SinkFactory sinkFactory;
+
+    /**
+     * The current report output directory to use
+     */
+    private File reportOutputDirectory;
+
+
+    /**
+     * This method is called when the report generation is invoked directly as a standalone Mojo.
      *
-     * @return Artifact 
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while searching for the artifact file.
+     * @throws MojoExecutionException if an error occurs when generating the report
+     * @see org.apache.maven.plugin.Mojo#execute()
      */
-    private Artifact getSkinArtifactFile() throws MojoFailureException, MojoExecutionException {
-        final Skin skin = Skin.getDefaultSkin();
-
-        String version = skin.getVersion();
-        final Artifact artifact;
-        try {
-            if (version == null) {
-                version = Artifact.RELEASE_VERSION;
-            }
-            VersionRange versionSpec = VersionRange.createFromVersionSpec(version);
-            artifact =
-                    factory.createDependencyArtifact(skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", null,
-                            null);
-
-            resolver.resolve(artifact, getProject().getRemoteArtifactRepositories(), localRepository);
-        } catch (InvalidVersionSpecificationException e) {
-            throw new MojoFailureException("The skin version '" + version + "' is not valid: " + e.getMessage());
-        } catch (ArtifactResolutionException e) {
-            throw new MojoExecutionException("Unable to find skin", e);
-        } catch (ArtifactNotFoundException e) {
-            throw new MojoFailureException("The skin does not exist: " + e.getMessage());
-        }
-
-        return artifact;
-    }
-
-    /**
-     * Called from Maven to invoke the plugin.
-     *
-     * @throws MojoFailureException   An error in the plugin configuration was detected.
-     * @throws MojoExecutionException An error occurred while creating the report.
-     */
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        if (skip) {
-            getLog().info("RAT will not execute since it is configured to be skipped via system property 'rat.skip'.");
+    @Override
+    public void execute()
+            throws MojoExecutionException {
+        if (!canGenerateReport()) {
             return;
         }
 
-        final DecorationModel model = new DecorationModel();
-        model.setBody(new Body());
-        final Map<String, String> attributes = new HashMap<>();
-        attributes.put("outputEncoding", "UTF-8");
-        final Locale locale = Locale.getDefault();
+        File outputDirectory = new File(getOutputDirectory());
+
+        String filename = getOutputName() + ".html";
+
+        Locale locale = Locale.getDefault();
+
         try {
-            final SiteRenderingContext siteContext =
-                    siteRenderer.createContextForSkin(getSkinArtifactFile(), attributes, model, getName(locale),
-                            locale);
-            final RenderingContext context = new RenderingContext(outputDirectory, getOutputName() + DOT_HTML);
+            SiteRenderingContext siteContext = createSiteRenderingContext(locale);
 
-            final SiteRendererSink sink = new SiteRendererSink(context);
-            generate(sink, locale);
+            // copy resources
+            getSiteRenderer().copyResources(siteContext, outputDirectory);
 
-            if (!outputDirectory.mkdirs() && !outputDirectory.isDirectory()) {
-                throw new IOException("Could not create output directory " + outputDirectory);
+            // TODO Replace null with real value
+            RenderingContext docRenderingContext = new RenderingContext(outputDirectory, filename, null);
+
+            SiteRendererSink sink = new SiteRendererSink(docRenderingContext);
+
+            generate(sink, null, locale);
+
+            // MSHARED-204: only render Doxia sink if not an external report
+            if (!isExternalReport()) {
+                outputDirectory.mkdirs();
+
+                try (Writer writer =
+                             new OutputStreamWriter(Files.newOutputStream(new File(outputDirectory, filename).toPath()),
+                                     getOutputEncoding())) {
+                    // render report
+                    getSiteRenderer().mergeDocumentIntoSite(writer, sink, siteContext);
+                }
             }
 
-
-            final Writer writer = new FileWriter(new File(outputDirectory, getOutputName() + DOT_HTML));
-
-            siteRenderer.generateDocument(writer, sink, siteContext);
-
-
-            siteRenderer.copyResources(siteContext, outputDirectory);
-        } catch (IOException | RendererException | MavenReportException e) {
-            throw new MojoExecutionException(e.getMessage(), e);
+            // copy generated resources also
+            getSiteRenderer().copyResources(siteContext, outputDirectory);
+        } catch (RendererException | IOException | MavenReportException e) {
+            throw new MojoExecutionException(
+                    "An error has occurred in " + getName(Locale.ENGLISH) + " report generation.", e);
         }
     }
 
+    private SiteRenderingContext createSiteRenderingContext(Locale locale)
+            throws MavenReportException, IOException {
+        DecorationModel decorationModel = new DecorationModel();
+
+        Map<String, Object> templateProperties = new HashMap<>();
+        // We tell the skin that we are rendering in standalone mode
+        templateProperties.put("standalone", Boolean.TRUE);
+        templateProperties.put("project", getProject());
+        templateProperties.put("inputEncoding", getInputEncoding());
+        templateProperties.put("outputEncoding", getOutputEncoding());
+        // Put any of the properties in directly into the Velocity context
+        for (Map.Entry<Object, Object> entry : getProject().getProperties().entrySet()) {
+            templateProperties.put((String) entry.getKey(), entry.getValue());
+        }
+
+        SiteRenderingContext context;
+        try {
+            Artifact skinArtifact =
+                    siteTool.getSkinArtifactFromRepository(localRepository, remoteRepositories, decorationModel);
+
+            getLog().info(buffer().a("Rendering content with ").strong(skinArtifact.getId()
+                    + " skin").a('.').toString());
+
+            context = siteRenderer.createContextForSkin(skinArtifact, templateProperties, decorationModel,
+                    project.getName(), locale);
+        } catch (SiteToolException e) {
+            throw new MavenReportException("Failed to retrieve skin artifact", e);
+        } catch (RendererException e) {
+            throw new MavenReportException("Failed to create context for skin", e);
+        }
+
+        // Generate static site
+        context.setRootDirectory(project.getBasedir());
+
+        return context;
+    }
+
     /**
-     * Returns, whether the report may be generated.
+     * Generate a report.
      *
-     * @return Always true.
+     * @param sink   the sink to use for the generation.
+     * @param locale the wanted locale to generate the report, could be null.
+     * @throws MavenReportException if any
+     * @deprecated use {@link #generate(Sink, SinkFactory, Locale)} instead.
      */
+    @Deprecated
+    @Override
+    public void generate(org.codehaus.doxia.sink.Sink sink, Locale locale)
+            throws MavenReportException {
+        generate(sink, null, locale);
+    }
+
+    /**
+     * Generate a report.
+     *
+     * @param sink
+     * @param locale
+     * @throws MavenReportException
+     * @deprecated use {@link #generate(Sink, SinkFactory, Locale)} instead.
+     */
+    @Deprecated
+    public void generate(Sink sink, Locale locale)
+            throws MavenReportException {
+        generate(sink, null, locale);
+    }
+
+    /**
+     * This method is called when the report generation is invoked by maven-site-plugin.
+     *
+     * @param sink
+     * @param sinkFactory
+     * @param locale
+     * @throws MavenReportException
+     */
+    @Override
+    public void generate(Sink sink, SinkFactory sinkFactory, Locale locale)
+            throws MavenReportException {
+        if (!canGenerateReport()) {
+            getLog().info("This report cannot be generated as part of the current build. "
+                    + "The report name should be referenced in this line of output.");
+            return;
+        }
+
+        this.sink = sink;
+
+        this.sinkFactory = sinkFactory;
+
+        executeReport(locale);
+
+        closeReport();
+    }
+
+    /**
+     * @return CATEGORY_PROJECT_REPORTS
+     */
+    @Override
+    public String getCategoryName() {
+        return CATEGORY_PROJECT_REPORTS;
+    }
+
+    @Override
+    public File getReportOutputDirectory() {
+        if (reportOutputDirectory == null) {
+            reportOutputDirectory = new File(getOutputDirectory());
+        }
+
+        return reportOutputDirectory;
+    }
+
+    @Override
+    public void setReportOutputDirectory(File reportOutputDirectory) {
+        this.reportOutputDirectory = reportOutputDirectory;
+        this.outputDirectory = reportOutputDirectory;
+    }
+
+    protected String getOutputDirectory() {
+        return outputDirectory.getAbsolutePath();
+    }
+
+    protected Renderer getSiteRenderer() {
+        return siteRenderer;
+    }
+
+    /**
+     * Gets the input files encoding.
+     *
+     * @return The input files encoding, never <code>null</code>.
+     */
+    protected String getInputEncoding() {
+        return (inputEncoding == null) ? ReaderFactory.FILE_ENCODING : inputEncoding;
+    }
+
+    /**
+     * Gets the effective reporting output files encoding.
+     *
+     * @return The effective reporting output file encoding, never <code>null</code>.
+     */
+    protected String getOutputEncoding() {
+        return (outputEncoding == null) ? WriterFactory.UTF_8 : outputEncoding;
+    }
+
+    /**
+     * Actions when closing the report.
+     */
+    protected void closeReport() {
+        getSink().close();
+    }
+
+    /**
+     * @return the sink used
+     */
+    public Sink getSink() {
+        return sink;
+    }
+
+    /**
+     * @return the sink factory used
+     */
+    public SinkFactory getSinkFactory() {
+        return sinkFactory;
+    }
+
+    /**
+     * @return {@code false} by default.
+     * @see org.apache.maven.reporting.MavenReport#isExternalReport()
+     */
+    @Override
+    public boolean isExternalReport() {
+        return false;
+    }
+
+    @Override
     public boolean canGenerateReport() {
-        return true;
+        return !skip;
     }
 
     /**
@@ -170,6 +350,7 @@
      *
      * @return Version number, if found, or null.
      */
+    // TODO The canonical way is to read the pom.properties for the artifact desired in META-INF/maven
     private String getRatVersion() {
         //noinspection unchecked
         for (Artifact a : (Iterable<Artifact>) getProject().getDependencyArtifacts()) {
@@ -183,11 +364,10 @@
     /**
      * Writes the report to the Doxia sink.
      *
-     * @param sink   The doxia sink, kind of a SAX handler.
      * @param locale The locale to use for writing the report.
      * @throws MavenReportException Writing the report failed.
      */
-    public void generate(Sink sink, Locale locale) throws MavenReportException {
+    protected void executeReport(Locale locale) throws MavenReportException {
         ResourceBundle bundle = getBundle(locale);
         final String title = bundle.getString("report.rat.title");
         sink.head();
@@ -216,7 +396,7 @@
         sink.paragraph_();
 
         sink.paragraph();
-        sink.verbatim(true);
+        sink.verbatim(SinkEventAttributeSet.BOXED);
         try {
             sink.text(createReport(Defaults.getDefaultStyleSheet()));
         } catch (MojoExecutionException | MojoFailureException e) {
@@ -229,15 +409,6 @@
     }
 
     /**
-     * Returns the reports category name.
-     *
-     * @return {@link MavenReport#CATEGORY_PROJECT_REPORTS}
-     */
-    public String getCategoryName() {
-        return MavenReport.CATEGORY_PROJECT_REPORTS;
-    }
-
-    /**
      * Returns the reports bundle
      *
      * @param locale Requested locale of the bundle
@@ -275,31 +446,4 @@
     public String getOutputName() {
         return "rat-report";
     }
-
-    /**
-     * Returns the reports output directory.
-     *
-     * @return Value of the "outputDirectory" parameter.
-     */
-    public File getReportOutputDirectory() {
-        return outputDirectory;
-    }
-
-    /**
-     * Returns, whether this is an external report.
-     *
-     * @return Always false.
-     */
-    public boolean isExternalReport() {
-        return false;
-    }
-
-    /**
-     * Sets the reports output directory.
-     *
-     * @param pOutputDirectory Reports target directory.
-     */
-    public void setReportOutputDirectory(File pOutputDirectory) {
-        outputDirectory = pOutputDirectory;
-    }
 }
diff --git a/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java b/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
index 9e785dc..b12e114 100644
--- a/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
+++ b/apache-rat-plugin/src/test/java/org/apache/rat/mp/RatCheckMojoTest.java
@@ -28,13 +28,10 @@
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.lang.reflect.Field;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
-import static junit.framework.TestCase.assertTrue;
-import org.apache.rat.document.impl.guesser.BinaryGuesser;
+import org.junit.Assume;
 
 import static org.apache.rat.mp.RatTestHelpers.ensureRatReportIsCorrect;
 import static org.apache.rat.mp.RatTestHelpers.getSourceDirectory;
@@ -217,13 +214,18 @@
      * @throws Exception The test failed.
      */
     public void testIt4() throws Exception {
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         final RatCheckMojo mojo = newRatCheckMojo("it4");
         final File ratTxtFile = getRatTxtFile(mojo);
         try {
             setVariableValueToObject(mojo, "reportStyle", "xml");
-            String origEncoding = overrideFileEncoding("ISO-8859-1");
             mojo.execute();
-            overrideFileEncoding(origEncoding);
             fail("Expected RatCheckException");
         } catch (RatCheckException e) {
             final String msg = e.getMessage();
@@ -250,39 +252,4 @@
             fail("Report file could not be parsed as XML: " + ex.getMessage());
         }
     }
-
-
-    private String overrideFileEncoding(String newEncoding) {
-        String current = System.getProperty("file.encoding");
-        System.setProperty("file.encoding", newEncoding);
-        setBinaryGuesserCharset(newEncoding);
-        clearDefaultCharset();
-        return current;
-    }
-
-    private void clearDefaultCharset() {
-        try {
-            Field f = Charset.class.getDeclaredField("defaultCharset");
-            f.setAccessible(true);
-            f.set(null, null);
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private void setBinaryGuesserCharset(String charset) {
-        try {
-            Field f = BinaryGuesser.class.getDeclaredField("CHARSET_FROM_FILE_ENCODING_OR_UTF8");
-            f.setAccessible(true);
-            f.set(null, Charset.forName(charset));
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
 }
diff --git a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
index 57532c4..e1fd9c5 100644
--- a/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
+++ b/apache-rat-plugin/src/test/java/org/apache/rat/mp/util/ExclusionHelperTest.java
@@ -88,7 +88,7 @@
 
     @Test
     public void testAddingPlexusAndScmExclusion() {
-        final int expectedSizeMergedFromPlexusDefaultsAndScm = (38 + SourceCodeManagementSystems.getPluginExclusions().size());
+        final int expectedSizeMergedFromPlexusDefaultsAndScm = (37 + SourceCodeManagementSystems.getPluginExclusions().size());
 
         final Set<String> exclusion = new HashSet<>();
         addPlexusAndScmDefaults(log, false, exclusion);
diff --git a/apache-rat-tasks/pom.xml b/apache-rat-tasks/pom.xml
index 639a573..84eb8b8 100644
--- a/apache-rat-tasks/pom.xml
+++ b/apache-rat-tasks/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat-tasks</artifactId>
   <packaging>jar</packaging>
@@ -158,6 +158,14 @@
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <forkCount>1</forkCount>
+            <argLine>-Dfile.encoding=ISO-8859-1</argLine>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>
diff --git a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
index c2bb271..ebed7f6 100644
--- a/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
+++ b/apache-rat-tasks/src/test/java/org/apache/rat/anttasks/ReportTest.java
@@ -30,6 +30,7 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import org.apache.rat.document.impl.guesser.BinaryGuesser;
+import org.junit.Assume;
 import org.junit.Test;
 import org.w3c.dom.Document;
 
@@ -144,9 +145,14 @@
      */
     @Test
     public void testISO88591() throws Exception {
-        String origEncoding = overrideFileEncoding("ISO-8859-1");
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         buildRule.executeTarget("testISO88591");
-        overrideFileEncoding(origEncoding);
         assertTrue("Log should contain the test umlauts", buildRule.getLog().contains("\u00E4\u00F6\u00FC\u00C4\u00D6\u00DC\u00DF"));
     }
 
@@ -155,12 +161,17 @@
      */
     @Test
     public void testISO88591WithFile() throws Exception {
+    	// In previous versions of the JDK, it used to be possible to
+    	// change the value of file.encoding at runtime. As of Java 16,
+    	// this is no longer possible. Instead, at this point, we check,
+    	// that file.encoding is actually ISO-8859-1. (Within Maven, this
+    	// is enforced by the configuration of the surefire plugin.) If not,
+    	// we skip this test.
+    	Assume.assumeTrue("Expected file.encoding=ISO-8859-1", "ISO-8859-1".equals(System.getProperty("file.encoding")));
         Charset.defaultCharset();
         String outputDir = System.getProperty("output.dir", "target/anttasks");
         String selftestOutput = System.getProperty("report.file", outputDir + "/selftest.report");
-        String origEncoding = overrideFileEncoding("ISO-8859-1");
         buildRule.executeTarget("testISO88591WithReportFile");
-        overrideFileEncoding(origEncoding);
         DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
         boolean documentParsed = false;
         try (FileInputStream fis = new FileInputStream(selftestOutput)) {
@@ -176,38 +187,4 @@
         }
         assertTrue("Report file could not be parsed as XML", documentParsed);
     }
-
-    private String overrideFileEncoding(String newEncoding) {
-        String current = System.getProperty("file.encoding");
-        System.setProperty("file.encoding", newEncoding);
-        setBinaryGuesserCharset(newEncoding);
-        clearDefaultCharset();
-        return current;
-    }
-
-    private void clearDefaultCharset() {
-        try {
-            Field f = Charset.class.getDeclaredField("defaultCharset");
-            f.setAccessible(true);
-            f.set(null, null);
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
-
-    private void setBinaryGuesserCharset(String charset) {
-        try {
-            Field f = BinaryGuesser.class.getDeclaredField("CHARSET_FROM_FILE_ENCODING_OR_UTF8");
-            f.setAccessible(true);
-            f.set(null, Charset.forName(charset));
-        } catch (Exception ex) {
-            // This is for unittesting - there is no good reason not to rethrow
-            // it. This could be happening in JDK 9, where the unittests need to
-            // run with the java.base module opened
-            throw new RuntimeException(ex);
-        }
-    }
 }
diff --git a/apache-rat/pom.xml b/apache-rat/pom.xml
index 8b0f4f4..6f4fcf9 100644
--- a/apache-rat/pom.xml
+++ b/apache-rat/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.apache.rat</groupId>
     <artifactId>apache-rat-project</artifactId>
-    <version>0.14-SNAPSHOT</version>
+    <version>0.16-SNAPSHOT</version>
   </parent>
   <artifactId>apache-rat</artifactId>
   <packaging>jar</packaging>
diff --git a/pom.xml b/pom.xml
index d0845a8..6245d96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,11 +20,11 @@
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
-    <version>24</version>
+    <version>27</version>
   </parent>
   <groupId>org.apache.rat</groupId>
   <artifactId>apache-rat-project</artifactId>
-  <version>0.14-SNAPSHOT</version>
+  <version>0.16-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Apache Creadur Rat</name>
   <url>https://creadur.apache.org/rat/</url>
@@ -46,7 +46,7 @@
     <!-- taken from https://maven.apache.org/guides/mini/guide-reproducible-builds.html -->
     <project.build.outputTimestamp>10</project.build.outputTimestamp>
     <ant.version>1.10.12</ant.version>
-    <mockito.version>4.3.1</mockito.version>
+    <mockito.version>4.7.0</mockito.version>
     <javaVersion>1.8</javaVersion>
     <maven.compiler.source>${javaVersion}</maven.compiler.source>
     <maven.compiler.target>${javaVersion}</maven.compiler.target>
@@ -56,8 +56,11 @@
     <!-- maven plugin versions -->
     <mavenPluginPluginVersion>3.6.4</mavenPluginPluginVersion>
     <mavenChangesVersion>2.12.1</mavenChangesVersion>
-    <mavenJavadocPluginVersion>3.3.1</mavenJavadocPluginVersion>
-    <previousRatVersion>0.13</previousRatVersion>
+    <mavenJavadocPluginVersion>3.4.1</mavenJavadocPluginVersion>
+    <mavenPmdPluginVersion>3.18.0</mavenPmdPluginVersion>
+    <!-- Used to generate download page for RAT during site builds, please adapt versions manually BEFORE doing a release -->
+    <previousRatVersion>0.16</previousRatVersion>
+    <currentSnapshotRatVersion>0.17-SNAPSHOT</currentSnapshotRatVersion>
   </properties>
   <distributionManagement>
     <site>
@@ -192,6 +195,7 @@
             </tag>
           </tags>
           <notimestamp>true</notimestamp>
+          <doclint>none</doclint>
         </configuration>
         <reportSets>
           <reportSet>
@@ -215,7 +219,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jxr-plugin</artifactId>
-        <version>3.1.1</version>
+        <version>3.3.0</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -228,7 +232,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-pmd-plugin</artifactId>
-        <version>3.14.0</version>
+        <version>${mavenPmdPluginVersion}</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -240,7 +244,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>3.1.2</version>
+        <version>3.4.1</version>
         <reportSets>
           <reportSet>
             <reports>
@@ -262,8 +266,8 @@
       <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
-        <!-- Do not use property values here as this makes problem during release -->
-        <version>0.13</version>
+        <!-- Do not use property values here as this causes problems during release -->
+        <version>0.15</version>
       </plugin>
     </plugins>
   </reporting>
@@ -280,7 +284,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-antrun-plugin</artifactId>
-          <version>3.0.0</version>
+          <version>3.1.0</version>
           <dependencies>
             <dependency>
               <groupId>org.apache.ant</groupId>
@@ -292,7 +296,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.9.0</version>
+          <version>3.10.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -302,12 +306,12 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.15.0</version>
+          <version>${mavenPmdPluginVersion}</version>
           <configuration>
             <targetJdk>${javaVersion}</targetJdk>
           </configuration>
@@ -315,7 +319,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.10.0</version>
+          <version>3.12.1</version>
           <configuration>
             <relativizeDecorationLinks>false</relativizeDecorationLinks>
           </configuration>
@@ -323,8 +327,8 @@
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
-          <!-- Do not use property values here as this makes problem during release -->
-          <version>0.13</version>
+          <!-- Do not use property values here as this causes problems during release -->
+          <version>0.15</version>
           <configuration>
             <excludes>
               <!-- This file only describes how to build the project and it has no license header -->
@@ -366,13 +370,13 @@
                     <artifactId>
         							apache-rat-plugin
         						</artifactId>
-                    <versionRange>[0.13,)</versionRange>
+                    <versionRange>[0.15,)</versionRange>
                     <goals>
                       <goal>check</goal>
                     </goals>
                   </pluginExecutionFilter>
                   <action>
-                    <ignore/>
+                    <ignore />
                   </action>
                 </pluginExecution>
               </pluginExecutions>
@@ -394,7 +398,7 @@
             </goals>
             <configuration>
               <target>
-                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false"/>
+                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false" />
               </target>
             </configuration>
           </execution>
@@ -403,7 +407,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>3.0.0</version>
+        <version>3.1.0</version>
         <executions>
           <execution>
             <!-- This checks the bytecode version of the dependencies transitively -->
@@ -428,7 +432,7 @@
           <dependency>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>extra-enforcer-rules</artifactId>
-            <version>1.5.1</version>
+            <version>1.6.1</version>
           </dependency>
         </dependencies>
       </plugin>
@@ -446,8 +450,7 @@
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <!-- 20220206: updating to 1.21 fails the build as there are undefined references within java.nio-references in RAT -->
-        <version>1.20</version>
+        <version>1.22</version>
         <executions>
           <execution>
             <!-- This checks the source code of our project -->
@@ -477,7 +480,7 @@
         <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ssh</artifactId>
         <!-- Last version that is compatible with Maven 2 -->
-        <version>3.5.1</version>
+        <version>3.5.2</version>
       </extension>
     </extensions>
   </build>
@@ -594,6 +597,7 @@
     <connection>scm:git:https://gitbox.apache.org/repos/asf/creadur-rat.git</connection>
     <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/creadur-rat.git</developerConnection>
     <url>https://gitbox.apache.org/repos/asf?p=creadur-rat.git</url>
+    <tag>HEAD</tag>
   </scm>
   <modules>
     <module>apache-rat-api</module>
@@ -616,6 +620,20 @@
   </organization>
   <profiles>
     <profile>
+      <id>maven.compiler.release</id>
+      <activation>
+        <jdk>[9,)</jdk>
+      </activation>
+      <properties>
+        <!--
+          Note that this cannot use our ${javaVersion} property, so it must
+          be changed manually when we decide to move to a higher version of
+          Java
+        -->
+        <maven.compiler.release>8</maven.compiler.release>
+      </properties>
+    </profile>
+    <profile>
       <id>apache-release</id>
       <build>
         <plugins>
@@ -679,4 +697,11 @@
       </build>
     </profile>
   </profiles>
+    <!-- in order to test new releases this reference can be activated locally-->
+    <pluginRepositories>
+      <pluginRepository>
+        <id>staged-releases-rat-015</id>
+        <url>https://repository.apache.org/content/repositories/orgapachecreadur-1008/</url>
+      </pluginRepository>
+    </pluginRepositories>
 </project>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 4b8af62..e05c0db 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -32,7 +32,8 @@
 
 mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nn]
 then tweak the formatting if necessary
-and commit
+and commit.
+Run with changes.version-parameter in order to not generate a SNAPSHOT changelog
 
 The <action> type attribute can be add,update,fix,remove.
 
@@ -42,9 +43,7 @@
     the rest are optional; order not important
 
     having the issue number first makes it easier to read the XML outline
-
 -->
-
 <document xmlns="http://maven.apache.org/changes/1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
@@ -54,7 +53,126 @@
   </properties>
 
   <body>
-    <release version="0.14-SNAPSHOT" date="2020-xx-xx" description="Current SNAPSHOT - to be done">
+    <!--release version="0.17-SNAPSHOT" date="xxxx-yy-zz" description="Current SNAPSHOT - release to be done">
+      <action issue="RAT-xxx" type="update" dev="pottlinger" due-to="dependabot">
+        TODO: collect all dependabot updates for release 0.17.
+      </action>
+    </release>
+    -->
+    <release version="0.16-SNAPSHOT" date="xxxx-yy-zz" description="Current SNAPSHOT - release to be done">
+      <action issue="RAT-311" type="update" dev="pottlinger" due-to="dependabot">
+        TODO: collect all dependabot updates for release 0.16.
+      </action>
+    </release>
+    <release version="0.15" date="2022-08-31" description="This release fixes a warning during site builds and updates various dependencies.">
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-javadoc-plugin from 3.4.0 to 3.4.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-jxr-plugin from 3.2.0 to 3.3.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update animal-sniffer-maven-plugin from 1.21 to 1.22.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-site-plugin from 3.12.0 to 3.12.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-pmd-plugin from 3.16.0 to 3.18.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update mockito-core from 4.6.0 to 4.7.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update extra-enforcer-rules from 1.5.1 to 1.6.1.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update Apache parent pom from 26 to 27.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update wagon-ssh from 3.5.1 to 3.5.2.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update maven-enforcer-plugin from 3.0.0 to 3.1.0.
+      </action>
+      <action issue="RAT-305" type="update" dev="pottlinger" due-to="dependabot">
+        Update actions/setup-java from 3.3.0 to 3.4.1.
+      </action>
+      <action issue="RAT-309" type="fix" dev="pottlinger" due-to="Michael Osipov, Gary Gregory">
+        Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy.
+      </action>
+      <action issue="RAT-309" type="fix" dev="pottlinger">
+        Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
+      </action>
+      <action issue="RAT-306" type="fix" dev="pottlinger">
+        Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
+      </action>
+      <action issue="RAT-310" type="update" dev="pottlinger">
+        Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.
+      </action>
+      <action issue="RAT-307" type="fix" dev="pottlinger">
+        Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.
+      </action>
+    </release>
+
+    <release version="0.14" date="2022-05-28" description="This release contains dependency updates, bugfixes and many improvements apart from infrastructure updates at ASF.">
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-jxr-plugin from 2.5 to 3.2.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-antrun-plugin from 3.0.0 to 3.1.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update github actions/checkout from 2 to 3.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update github actions/setup-java from 2.5.0 to 3.3.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-pmd-plugin from 3.14.0 to 3.16.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-javadoc-plugin from 3.3.1 to 3.4.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-compiler-plugin from 3.8.1 to 3.10.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update wagon-ssh from 3.5.0 to 3.5.1.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-site-plugin from 3.9.1 to 3.12.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update maven-project-info-reports-plugin from 3.1.1 to 3.3.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update mockito-core from 3.11.2 to 4.6.0.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
+        Update ASF parent from 23 to 26.
+      </action>
+      <action issue="RAT-288" type="add" dev="pottlinger" due-to="Michael Osipov">
+        Adapt logging output to be more compliant with future Maven versions as debug is deprecated and verbose is the recommended way to go.
+      </action>
+      <action type="fix" issue="RAT-273" dev="jochen">
+        Some tests were based on the assumption, that the value of file.encoding
+        can be changed on runtime. (Won't work nowadays, beginning with Java 16.)
+        Removed this assumption in favour of a proper surefire configuration.
+      </action>
+      <action issue="RAT-273" type="fix" dev="jochen">
+        Workaround for an incompatibility in the java.io.LineNumberReader, which is
+        being replaced by the org.apache.rat.header.LineNumberReader.
+      </action>
+      <action issue="RAT-297" type="add" dev="pottlinger" due-to="Michael Osipov">
+        Update maven-reporting-api from 3.0 to 3.1.0 and remove usage of deprecated Sink API.
+      </action>
+      <action issue="RAT-290" type="fix" dev="pottlinger" due-to="Jin Xu/Xeno Amess">
+        Update animal-sniffer-maven-plugin from 1.20 to 1.21.
+      </action>
       <action issue="RAT-296" type="fix" dev="pottlinger">
         Use Github Actions for matrix builds on Windows and ubuntu with JDK 8,11,12,13,14,15. Simplify Travis integration to avoid dockerhub-related build failures.
       </action>
@@ -65,16 +183,16 @@
         Fix links to Travis builds for all creadur projects.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update maven-dependency-plugin from 3.1.1 to 3.2.0. Thanks to dependabot.
+        Update maven-dependency-plugin from 3.1.1 to 3.2.0.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update plexus-utils from 3.0.21 to 3.4.1. Thanks to dependabot.
+        Update plexus-utils from 3.0.21 to 3.4.1.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update commons-cli from 1.4 to 1.5.0. Thanks to dependabot.
+        Update commons-cli from 1.4 to 1.5.0.
       </action>
       <action issue="RAT-290" type="fix" dev="pottlinger" due-to="dependabot">
-        Update maven-plugin-annotations from 3.6.1 to 3.6.2. Thanks to dependabot.
+        Update maven-plugin-annotation and maven-plugin-plugin from 3.6.1 to 3.6.2.
       </action>
       <action issue="RAT-275" type="fix" dev="pottlinger">
         Update to doxia 1.11.1 in order to get CVE-2020-13956-httpclient problem fixes in doxia.
diff --git a/src/site/site.xml b/src/site/site.xml
index c12b28a..beda3f7 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -99,7 +99,7 @@
     <menu ref="modules"/>
     <menu ref="reports"/>
 
-    <footer>Copyright &amp;copy; 2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+    <footer>Copyright &amp;copy; 2016-2022 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
       Apache Creadur, Creadur, Apache Rat, Apache Tentacles, Apache Whisker, Apache and the Apache feather logo are trademarks
       of The Apache Software Foundation.
       Oracle and Java are registered trademarks of Oracle and/or its affiliates.
diff --git a/src/site/xdoc/download_rat.xml.vm b/src/site/xdoc/download_rat.xml.vm
index 248cb6c..ee1fdb9 100644
--- a/src/site/xdoc/download_rat.xml.vm
+++ b/src/site/xdoc/download_rat.xml.vm
@@ -29,17 +29,15 @@
           distribution directories. Recent releases (48 hours) may not yet
           be available from the mirrors.
         </p>
-
         <p>
           You are currently using <b>[preferred]</b>.  If you
           encounter a problem with this mirror, please select another
           mirror.  If all mirrors are failing, there are <i>backup</i>
           mirrors (at the end of the mirrors list) that should be
           available.
-          <br></br>
-          [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
+          <br/>
+          [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"/></a>[end]
         </p>
-
         <form action="[location]" method="get" id="SelectMirror">
           <p>
             Other mirrors:
@@ -54,13 +52,11 @@
               [for backup]<option value="[backup]">[backup] (backup)</option>[end]
               [end]
             </select>
-            <input type="submit" value="Change"></input>
+            <input type="submit" value="Change"/>
           </p>
         </form>
-
         <p>
-          The <a
-          href="https://www.apache.org/dist/creadur/KEYS">KEYS</a>
+          The <a href="https://www.apache.org/dist/creadur/KEYS">KEYS</a>
           file links to the code signing keys used to sign the
           product.  The <code>PGP</code> link downloads the OpenPGP
           compatible signature from our main site.  The
@@ -72,51 +68,106 @@
       <subsection name="Binaries">
         <table>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2">apache-rat-${previousRatVersion}-bin.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2">apache-rat-${previousRatVersion}-bin.tar.bz2</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.bz2.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz">apache-rat-${previousRatVersion}-bin.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz">apache-rat-${previousRatVersion}-bin.tar.gz</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.tar.gz.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip">apache-rat-${previousRatVersion}-bin.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip">apache-rat-${previousRatVersion}-bin.zip</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-bin.zip.asc">pgp</a>
+            </td>
           </tr>
         </table>
       </subsection>
       <subsection name="Source">
         <table>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2">apache-rat-${previousRatVersion}-src.tar.bz2</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2">apache-rat-${previousRatVersion}-src.tar.bz2</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.bz2.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz">apache-rat-${previousRatVersion}-src.tar.gz</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz">apache-rat-${previousRatVersion}-src.tar.gz</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.tar.gz.asc">pgp</a>
+            </td>
           </tr>
           <tr>
-              <td><a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip">apache-rat-${previousRatVersion}-src.zip</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.sha512">sha512</a></td>
-              <td><a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.asc">pgp</a></td>
+            <td>
+              <a href="[preferred]/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip">apache-rat-${previousRatVersion}-src.zip</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.sha512">sha512</a>
+            </td>
+            <td>
+              <a href="https://www.apache.org/dist/creadur/apache-rat-${previousRatVersion}/apache-rat-${previousRatVersion}-src.zip.asc">pgp</a>
+            </td>
           </tr>
         </table>
       </subsection>
     </section>
+    <div class="section">
+      <h2><a name="Apache_Creadur_Rat_${currentSnapshotRatVersion}"/>${project.name} ${currentSnapshotRatVersion}</h2>
+      <div class="section">
+        <h3><a name="Snapshots"/>Snapshots</h3>
+        <table border="0" class="bodyTable">
+          <tr class="a">
+            <td colspan="4">
+              <a class="externalLink" href="https://repository.apache.org/content/repositories/snapshots/org/apache/rat">${project.name} ${currentSnapshotRatVersion}</a>
+            </td>
+          </tr>
+        </table>
+      </div>
+    </div>
     <section name="Archives">
-        <p>
+      <p>
           Older releases can be obtained from the archives.
         </p>
-        <ul>
-          <li class="download"><a href="[preferred]/creadur/">browse download area</a></li>
-          <li><a href="https://archive.apache.org/dist/creadur/">archives...</a></li>
-          <li><a href="https://archive.apache.org/dist/incubator/rat/">Incubator archives...</a></li>
-        </ul>
+      <ul>
+        <li class="download">
+          <a href="[preferred]/creadur/">browse download area</a>
+        </li>
+        <li>
+          <a href="https://archive.apache.org/dist/creadur/">archives...</a>
+        </li>
+        <li>
+          <a href="https://archive.apache.org/dist/incubator/rat/">Incubator archives...</a>
+        </li>
+      </ul>
     </section>
   </body>
 </document>