You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/08/01 08:56:57 UTC

[maven-plugin-tools] branch MPLUGIN-400 updated (08e3fcef -> cf4a1d4e)

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

sjaranowski pushed a change to branch MPLUGIN-400
in repository https://gitbox.apache.org/repos/asf/maven-plugin-tools.git


 discard 08e3fcef [MPLUGIN-400] Add system requirements history section
     new cf4a1d4e [MPLUGIN-400] Add system requirements history section

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (08e3fcef)
            \
             N -- N -- N   refs/heads/MPLUGIN-400 (cf4a1d4e)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

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.


Summary of changes:
 .../java/org/apache/maven/plugin/plugin/report/PluginReport.java    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)


[maven-plugin-tools] 01/01: [MPLUGIN-400] Add system requirements history section

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

sjaranowski pushed a commit to branch MPLUGIN-400
in repository https://gitbox.apache.org/repos/asf/maven-plugin-tools.git

commit cf4a1d4eb559c885014faaad82c88f97e3a5313e
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Mon Aug 1 10:52:27 2022 +0200

    [MPLUGIN-400] Add system requirements history section
    
    - add new section in report
    - move report to separate package
    - not use modello for simple case
---
 maven-plugin-plugin/pom.xml                        |  19 +---
 .../invoker.properties                             |  19 ++++
 .../pom.xml                                        |  92 ++++++++++++++++++
 .../src/main/java/org/MyMojo.java                  |  65 +++++++++++++
 .../verify.groovy                                  |  25 +++++
 .../invoker.properties                             |  18 ++++
 .../it/plugin-report-requirements-history/pom.xml  |  97 +++++++++++++++++++
 .../src/main/java/org/MyMojo.java                  |  65 +++++++++++++
 .../verify.groovy                                  |  30 ++++++
 .../plugin/plugin/{ => report}/PluginReport.java   | 105 +++++++++++++++++----
 .../maven/plugin/plugin/report/Requirements.java   |  91 ++++++++++++++++++
 .../plugin/plugin/report/RequirementsHistory.java  |  99 +++++++++++++++++++
 .../src/main/mdo/pluginRequirements.mdo            |  78 ---------------
 .../src/main/resources/plugin-report.properties    |   6 ++
 .../src/main/resources/plugin-report_de.properties |  20 ++--
 .../src/main/resources/plugin-report_fr.properties |  20 ++--
 .../src/main/resources/plugin-report_sv.properties |  30 +++---
 .../plugin/report/RequirementsHistoryTest.java     |  78 +++++++++++++++
 pom.xml                                            |   7 +-
 19 files changed, 821 insertions(+), 143 deletions(-)

diff --git a/maven-plugin-plugin/pom.xml b/maven-plugin-plugin/pom.xml
index 448f6bd9..d0a2db6f 100644
--- a/maven-plugin-plugin/pom.xml
+++ b/maven-plugin-plugin/pom.xml
@@ -179,7 +179,7 @@
     <!-- tests -->
     <dependency>
       <groupId>org.junit.jupiter</groupId>
-      <artifactId>junit-jupiter-engine</artifactId>
+      <artifactId>junit-jupiter</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -229,23 +229,6 @@
       </plugins>
     </pluginManagement>
     <plugins>
-      <plugin>
-        <groupId>org.codehaus.modello</groupId>
-        <artifactId>modello-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>java</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <version>1.0.0</version>
-          <models>
-            <model>src/main/mdo/pluginRequirements.mdo</model>
-          </models>
-        </configuration>
-      </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/invoker.properties b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/invoker.properties
new file mode 100644
index 00000000..be0ed799
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/invoker.properties
@@ -0,0 +1,19 @@
+# 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.
+
+invoker.goals=site
+invoker.buildResult=failure
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/pom.xml b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/pom.xml
new file mode 100644
index 00000000..2b67539c
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/pom.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>plugin-report</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+
+  <name>MPLUGIN-400</name>
+  <description>
+    Test basic site generation to guard against regression.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>@mavenVersion@</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>@project.version@</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.10.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>@sitePluginVersion@</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>@project.version@</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <reporting>
+    <excludeDefaults>true</excludeDefaults>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <requirementsHistories>
+            <requirementsHistory>1.1.99 Maven 3.2.5 JDK 1.7</requirementsHistory>
+          </requirementsHistories>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/src/main/java/org/MyMojo.java b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/src/main/java/org/MyMojo.java
new file mode 100644
index 00000000..82a95ab3
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/src/main/java/org/MyMojo.java
@@ -0,0 +1,65 @@
+package org;
+
+/*
+ * 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 org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+
+/**
+ * Does nothing.
+ *
+ * @since 1.0
+ * @deprecated You don't use test goals, do you?
+ */
+@Mojo( name = "noop", defaultPhase = LifecyclePhase.PROCESS_SOURCES,
+       requiresDependencyResolution = ResolutionScope.TEST,
+       requiresDirectInvocation = true, requiresOnline = true, inheritByDefault = false, aggregator = true )
+@Execute( phase = LifecyclePhase.COMPILE )
+public class MyMojo
+    extends AbstractMojo
+{
+
+    /**
+     * This is a test.
+     */
+    @SuppressWarnings( "unused" )
+    @Parameter( required = true )
+    private String required;
+
+    /**
+     * This is a test.
+     *
+     * @since 1.1
+     * @deprecated Just testing.
+     */
+    @SuppressWarnings( "unused" )
+    @Parameter( property = "string", defaultValue = "${project.version}/</markup-must-be-escaped>" )
+    private String string;
+
+    public void execute()
+    {
+        // intentional do nothing
+    }
+
+}
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/verify.groovy b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/verify.groovy
new file mode 100644
index 00000000..d121ee68
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history-wrong-format/verify.groovy
@@ -0,0 +1,25 @@
+/*
+ * 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.
+ */
+
+assert !new File( basedir, 'target/site/noop-mojo.html' ).isFile()
+assert !new File( basedir, 'target/site/plugin-info.html' ).isFile()
+
+def buildLog = new File( basedir, "build.log" );
+
+assert buildLog.text.contains( 'Value for requirementsHistories item should have format: <plugin-version> requires Maven <maven-version> and JDK <jdk-version>' )
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history/invoker.properties b/maven-plugin-plugin/src/it/plugin-report-requirements-history/invoker.properties
new file mode 100644
index 00000000..a3d335ef
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history/invoker.properties
@@ -0,0 +1,18 @@
+# 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.
+
+invoker.goals = site
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history/pom.xml b/maven-plugin-plugin/src/it/plugin-report-requirements-history/pom.xml
new file mode 100644
index 00000000..007bf5af
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>plugin-report</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>maven-plugin</packaging>
+
+  <name>MPLUGIN-400</name>
+  <description>
+    Test basic site generation to guard against regression.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>@mavenVersion@</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>@project.version@</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.10.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-site-plugin</artifactId>
+          <version>@sitePluginVersion@</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>@project.version@</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+
+  <reporting>
+    <excludeDefaults>true</excludeDefaults>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <requirementsHistories>
+            <requirementsHistory>1.1.99 requires Maven 3.2.5 and JDK 1.7</requirementsHistory>
+            <requirementsHistory>
+              <version>2.0.99</version>
+              <maven>3.8.6</maven>
+              <jdk>1.8</jdk>
+            </requirementsHistory>
+          </requirementsHistories>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history/src/main/java/org/MyMojo.java b/maven-plugin-plugin/src/it/plugin-report-requirements-history/src/main/java/org/MyMojo.java
new file mode 100644
index 00000000..82a95ab3
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history/src/main/java/org/MyMojo.java
@@ -0,0 +1,65 @@
+package org;
+
+/*
+ * 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 org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+
+/**
+ * Does nothing.
+ *
+ * @since 1.0
+ * @deprecated You don't use test goals, do you?
+ */
+@Mojo( name = "noop", defaultPhase = LifecyclePhase.PROCESS_SOURCES,
+       requiresDependencyResolution = ResolutionScope.TEST,
+       requiresDirectInvocation = true, requiresOnline = true, inheritByDefault = false, aggregator = true )
+@Execute( phase = LifecyclePhase.COMPILE )
+public class MyMojo
+    extends AbstractMojo
+{
+
+    /**
+     * This is a test.
+     */
+    @SuppressWarnings( "unused" )
+    @Parameter( required = true )
+    private String required;
+
+    /**
+     * This is a test.
+     *
+     * @since 1.1
+     * @deprecated Just testing.
+     */
+    @SuppressWarnings( "unused" )
+    @Parameter( property = "string", defaultValue = "${project.version}/</markup-must-be-escaped>" )
+    private String string;
+
+    public void execute()
+    {
+        // intentional do nothing
+    }
+
+}
diff --git a/maven-plugin-plugin/src/it/plugin-report-requirements-history/verify.groovy b/maven-plugin-plugin/src/it/plugin-report-requirements-history/verify.groovy
new file mode 100644
index 00000000..d573e5e6
--- /dev/null
+++ b/maven-plugin-plugin/src/it/plugin-report-requirements-history/verify.groovy
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+
+assert new File( basedir, 'target/site/noop-mojo.html' ).isFile()
+
+def pluginInfo = new File( basedir, 'target/site/plugin-info.html' )
+assert pluginInfo.isFile()
+
+assert pluginInfo.text.contains('1.1.99')
+assert pluginInfo.text.contains('2.0.99')
+assert pluginInfo.text.contains('3.2.5')
+assert pluginInfo.text.contains('3.8.6')
+assert pluginInfo.text.contains('1.7')
+assert pluginInfo.text.contains('1.8')
diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
similarity index 88%
rename from maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
rename to maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
index 5916df92..496fad72 100644
--- a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
+++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
@@ -1,4 +1,4 @@
-package org.apache.maven.plugin.plugin;
+package org.apache.maven.plugin.plugin.report;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -104,7 +104,7 @@ public class PluginReport
      *   &lt;/others&gt;
      * &lt;/requirements&gt;
      * </pre>
-     * 
+     * <p>
      * If not is specified, Maven requirement is extracted from
      * <code>&lt;project&gt;&lt;prerequisites&gt;&lt;maven&gt;</code>
      * and JDK requirement is extracted from maven-compiler-plugin configuration.
@@ -159,12 +159,42 @@ public class PluginReport
     /**
      * Set this to "true" to generate the usage section for "plugin-info.html" with
      * {@code <extensions>true</extensions>}.
-     * 
+     *
      * @since 3.7.0
      */
     @Parameter( defaultValue = "false", property = "maven.plugin.report.hasExtensionsToLoad" )
     private boolean hasExtensionsToLoad;
 
+    /**
+     * The Plugin requirements history list.
+     * <p>
+     * Can be specified as list of string in format:
+     *
+     * <pre>
+     * &lt;requirementsHistories&gt;
+     *   &lt;requirementsHistory&gt;
+     *     plugin-version requires Maven maven-version and JDK jdk-version
+     *   &lt;/requirementsHistory&gt;
+     * &lt;/requirementsHistories&gt;
+     * </pre>
+     *
+     * or as xml:
+     *
+     * <pre>
+     * &lt;requirementsHistories&gt;
+     *   &lt;requirementsHistory&gt;
+     *     &lt;version&gt;plugin version&lt;/version&gt;
+     *     &lt;maven&gt;maven version&lt;/maven&gt;
+     *     &lt;jdk&gt;jdk version&lt;/jdk&gt;
+     *   &lt;/requirementsHistory&gt;
+     * &lt;/requirementsHistories&gt;
+     * </pre>
+     *
+     * @since 3.7.0
+     */
+    @Parameter
+    private List<RequirementsHistory> requirementsHistories = new ArrayList<>();
+
     /**
      * @since 3.5.1
      */
@@ -177,7 +207,7 @@ public class PluginReport
      * @since 3.5.1
      */
     @Parameter( defaultValue = "${project.build.outputDirectory}/META-INF/maven/plugin.xml", required = true,
-                    readonly = true )
+                readonly = true )
     private File pluginXmlFile;
 
     /**
@@ -219,8 +249,8 @@ public class PluginReport
 
         // Write the overview
         PluginOverviewRenderer r =
-            new PluginOverviewRenderer( getProject(), requirements, getSink(),
-                    pluginDescriptor, locale, hasExtensionsToLoad );
+            new PluginOverviewRenderer( getProject(), requirements, requirementsHistories, getSink(),
+                                        pluginDescriptor, locale, hasExtensionsToLoad );
         r.render();
     }
 
@@ -241,10 +271,10 @@ public class PluginReport
     }
 
     /**
-     * Return the pluginDescriptorBuilder to use based on the Maven version: either use the original from the 
-     * maven-plugin-api or a patched version for Maven versions before the MNG-6109 fix 
+     * Return the pluginDescriptorBuilder to use based on the Maven version: either use the original from the
+     * maven-plugin-api or a patched version for Maven versions before the MNG-6109 fix
      * (because of Maven MNG-6109 bug that won't give accurate 'since' info when reading plugin.xml).
-     * 
+     *
      * @return the proper pluginDescriptorBuilder
      * @see <a href="https://issues.apache.org/jira/browse/MNG-6109">MNG-6109</a>
      * @see <a href="https://issues.apache.org/jira/browse/MPLUGIN-319">MPLUGIN-319</a>
@@ -338,6 +368,8 @@ public class PluginReport
 
         private final Requirements requirements;
 
+        private final List<RequirementsHistory> requirementsHistories;
+
         private final PluginDescriptor pluginDescriptor;
 
         private final Locale locale;
@@ -345,13 +377,15 @@ public class PluginReport
         private final boolean hasExtensionsToLoad;
 
         /**
-         * @param project          not null
-         * @param requirements     not null
-         * @param sink             not null
-         * @param pluginDescriptor not null
-         * @param locale           not null
+         * @param project               not null
+         * @param requirements          not null
+         * @param requirementsHistories not null
+         * @param sink                  not null
+         * @param pluginDescriptor      not null
+         * @param locale                not null
          */
-        PluginOverviewRenderer( MavenProject project, Requirements requirements, Sink sink,
+        PluginOverviewRenderer( MavenProject project, Requirements requirements,
+                                List<RequirementsHistory> requirementsHistories, Sink sink,
                                 PluginDescriptor pluginDescriptor, Locale locale, boolean hasExtensionsToLoad )
         {
             super( sink );
@@ -360,6 +394,8 @@ public class PluginReport
 
             this.requirements = ( requirements == null ? new Requirements() : requirements );
 
+            this.requirementsHistories = requirementsHistories;
+
             this.pluginDescriptor = pluginDescriptor;
 
             this.locale = locale;
@@ -411,11 +447,11 @@ public class PluginReport
             String descriptionColumnName = getBundle( locale ).getString( "report.plugin.goals.column.description" );
             if ( hasMavenReport )
             {
-                tableHeader( new String[]{ goalColumnName, isMavenReport, descriptionColumnName } );
+                tableHeader( new String[] {goalColumnName, isMavenReport, descriptionColumnName} );
             }
             else
             {
-                tableHeader( new String[]{ goalColumnName, descriptionColumnName } );
+                tableHeader( new String[] {goalColumnName, descriptionColumnName} );
             }
 
             List<MojoDescriptor> mojos = new ArrayList<>();
@@ -527,11 +563,44 @@ public class PluginReport
 
             endSection();
 
+            renderRequirementsHistories();
+
             renderUsageSection( hasMavenReport );
 
             endSection();
         }
 
+        private void renderRequirementsHistories()
+        {
+            if ( requirementsHistories.isEmpty() )
+            {
+                return;
+            }
+
+            startSection( getBundle( locale ).getString( "report.plugin.systemrequirements.history" ) );
+            paragraph( getBundle( locale ).getString( "report.plugin.systemrequirements.history.intro" ) );
+
+            startTable();
+            tableHeader( new String[] {
+                getBundle( locale ).getString( "report.plugin.systemrequirements.history.version" ),
+                getBundle( locale ).getString( "report.plugin.systemrequirements.history.maven" ),
+                getBundle( locale ).getString( "report.plugin.systemrequirements.history.jdk" )
+            } );
+
+            requirementsHistories.forEach(
+                requirementsHistory ->
+                {
+                    sink.tableRow();
+                    tableCell( requirementsHistory.getVersion() );
+                    tableCell( requirementsHistory.getMaven() );
+                    tableCell( requirementsHistory.getJdk() );
+                    sink.tableRow_();
+                } );
+            endTable();
+
+            endSection();
+        }
+
         /**
          * Render the section about the usage of the plugin.
          *
@@ -565,7 +634,7 @@ public class PluginReport
             if ( hasExtensionsToLoad )
             {
                 sb.append( "          <extensions>true</extensions>" ).append(
-                        '\n' );
+                    '\n' );
             }
             sb.append( "        </plugin>" ).append( '\n' );
             sb.append( "        ..." ).append( '\n' );
diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/Requirements.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/Requirements.java
new file mode 100644
index 00000000..68c1cd01
--- /dev/null
+++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/Requirements.java
@@ -0,0 +1,91 @@
+package org.apache.maven.plugin.plugin.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Properties;
+
+/**
+ * Plugin requirements.
+ */
+public class Requirements
+{
+    /**
+     * The minimum version of Maven to run this plugin.
+     */
+    private String maven;
+
+    /**
+     * The minimum version of the JDK to run this plugin.
+     */
+    private String jdk;
+
+    /**
+     * The minimum memory needed to run this plugin.
+     */
+    private String memory;
+
+    /**
+     * The minimum diskSpace needed to run this plugin.
+     */
+    private String diskSpace;
+
+    /**
+     * Field others.
+     */
+    private java.util.Properties others;
+
+    public String getMaven()
+    {
+        return maven;
+    }
+
+    public String getJdk()
+    {
+        return jdk;
+    }
+
+    public String getMemory()
+    {
+        return memory;
+    }
+
+    public String getDiskSpace()
+    {
+        return diskSpace;
+    }
+
+    public Properties getOthers()
+    {
+        return others;
+    }
+
+    @Override
+    public String toString()
+    {
+        final StringBuilder sb = new StringBuilder( "Requirements{" );
+        sb.append( "maven='" ).append( maven ).append( '\'' );
+        sb.append( ", jdk='" ).append( jdk ).append( '\'' );
+        sb.append( ", memory='" ).append( memory ).append( '\'' );
+        sb.append( ", diskSpace='" ).append( diskSpace ).append( '\'' );
+        sb.append( ", others=" ).append( others );
+        sb.append( '}' );
+        return sb.toString();
+    }
+}
diff --git a/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
new file mode 100644
index 00000000..e6754b15
--- /dev/null
+++ b/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
@@ -0,0 +1,99 @@
+package org.apache.maven.plugin.plugin.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.maven.reporting.MavenReportException;
+
+/**
+ * Plugin requirements history.
+ *
+ * @author Slawomir Jaranowski
+ */
+public class RequirementsHistory
+{
+    private static final Pattern REQUIREMENT_PATTERN =
+        Pattern.compile( "\\s*(.+?)\\s+requires\\s+Maven\\s+(.+?)\\s+and\\s+JDK\\s+(.+?)\\s*" );
+
+    /**
+     * The plugin version.
+     */
+    String version;
+
+    /**
+     * The minimum version of Maven to run this plugin.
+     */
+    String maven;
+
+    /**
+     * The minimum version of the JDK to run this plugin.
+     */
+    String jdk;
+
+    /**
+     * Method called by Maven in case of set default value for a configuration bean.
+     *
+     * @param requirement a requirement description
+     * @throws MavenReportException if requirement not meet required pattern
+     */
+    public void set( String requirement ) throws MavenReportException
+    {
+        Matcher matcher = REQUIREMENT_PATTERN.matcher( requirement );
+
+        if ( !matcher.matches() )
+        {
+            throw new MavenReportException( "Value for requirementsHistories item should have format: "
+                                                + "<plugin-version> requires Maven <maven-version> "
+                                                + "and JDK <jdk-version>" );
+        }
+
+        version = matcher.group( 1 );
+        maven = matcher.group( 2 );
+        jdk = matcher.group( 3 );
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public String getMaven()
+    {
+        return maven;
+    }
+
+    public String getJdk()
+    {
+        return jdk;
+    }
+
+    @Override
+    public String toString()
+    {
+        final StringBuilder sb = new StringBuilder( "RequirementsHistory{" );
+        sb.append( "version='" ).append( version ).append( '\'' );
+        sb.append( ", maven='" ).append( maven ).append( '\'' );
+        sb.append( ", jdk='" ).append( jdk ).append( '\'' );
+        sb.append( '}' );
+        return sb.toString();
+    }
+}
diff --git a/maven-plugin-plugin/src/main/mdo/pluginRequirements.mdo b/maven-plugin-plugin/src/main/mdo/pluginRequirements.mdo
deleted file mode 100644
index 9516b815..00000000
--- a/maven-plugin-plugin/src/main/mdo/pluginRequirements.mdo
+++ /dev/null
@@ -1,78 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-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.
--->
-
-<model xmlns="https://codehaus-plexus.github.io/MODELLO/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="https://codehaus-plexus.github.io/MODELLO/1.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-1.0.0.xsd">
-  <id>pluginRequirements</id>
-  <name>PluginRequirements</name>
-  <description><![CDATA[Model to specify plugin requirements.]]></description>
-  <defaults>
-    <default>
-      <key>package</key>
-      <value>org.apache.maven.plugin.plugin</value>
-    </default>
-  </defaults>
-  <classes>
-    <class>
-      <name>Requirements</name>
-      <description>Plugin requirements.</description>
-      <version>1.0.0</version>
-      <fields>
-        <field>
-          <name>maven</name>
-          <description>The minimum version of Maven to run this plugin.</description>
-          <version>1.0.0</version>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>jdk</name>
-          <description>The minimum version of the JDK to run this plugin.</description>
-          <version>1.0.0</version>
-          <type>String</type>
-          <identifier>true</identifier>
-        </field>
-        <field>
-          <name>memory</name>
-          <description>The minimum memory needed to run this plugin.</description>
-          <version>1.0.0</version>
-          <type>String</type>
-        </field>
-        <field>
-          <name>diskSpace</name>
-          <description>The minimum diskSpace needed to run this plugin.</description>
-          <version>1.0.0</version>
-          <type>String</type>
-        </field>
-        <field>
-          <name>others</name>
-          <description>Others requirements properties.</description>
-          <version>1.0.0</version>
-          <type>Properties</type>
-          <association xml.mapStyle="inline">
-            <type>String</type>
-            <multiplicity>*</multiplicity>
-          </association>
-        </field>
-      </fields>
-    </class>
-  </classes>
-</model>
diff --git a/maven-plugin-plugin/src/main/resources/plugin-report.properties b/maven-plugin-plugin/src/main/resources/plugin-report.properties
index bd108729..7d9c45b5 100644
--- a/maven-plugin-plugin/src/main/resources/plugin-report.properties
+++ b/maven-plugin-plugin/src/main/resources/plugin-report.properties
@@ -37,6 +37,12 @@ report.plugin.systemrequirements.jdk=JDK
 report.plugin.systemrequirements.memory=Memory
 report.plugin.systemrequirements.diskspace=Disk Space
 
+report.plugin.systemrequirements.history=System Requirements History
+report.plugin.systemrequirements.history.intro=The following specifies the minimum requirements to run this Maven plugin for historical versions:
+report.plugin.systemrequirements.history.version=Plugin Version
+report.plugin.systemrequirements.history.maven=Maven
+report.plugin.systemrequirements.history.jdk=JDK
+
 report.plugin.usage=Usage
 report.plugin.usage.intro=You should specify the version in your project's plugin configuration:
 report.plugin.usage.pluginManagement=To define the plugin version in your parent POM
diff --git a/maven-plugin-plugin/src/main/resources/plugin-report_de.properties b/maven-plugin-plugin/src/main/resources/plugin-report_de.properties
index 6259b7bc..e87e5c07 100644
--- a/maven-plugin-plugin/src/main/resources/plugin-report_de.properties
+++ b/maven-plugin-plugin/src/main/resources/plugin-report_de.properties
@@ -21,8 +21,8 @@ report.plugin.name=Plugin-Dokumentation
 report.plugin.description=Dieser Bericht dokumentiert die Goals des Plugins und deren Parameter.
 report.plugin.title=Plugin-Dokumentation
 
-report.plugin.goals.nogoal=Keine Goals verf\u00fcgbar.
-report.plugin.goals.intro=Verf\u00fcgbare Goals dieses Plugins:
+report.plugin.goals.nogoal=Keine Goals verf\u00FCgbar.
+report.plugin.goals.intro=Verf\u00FCgbare Goals dieses Plugins:
 report.plugin.goals.column.goal=Goal
 report.plugin.goals.column.isMavenReport=Bericht?
 report.plugin.goals.column.description=Beschreibung
@@ -30,19 +30,25 @@ report.plugin.goal.nodescription=Keine Beschreibung.
 report.plugin.goal.deprecated=Missbilligt.
 
 report.plugin.systemrequirements=Systemvoraussetzungen
-report.plugin.systemrequirements.intro=Die folgende Tabelle listet die Mindestanforderungen zum Ausf\u00fchren dieses Plugins auf:
+report.plugin.systemrequirements.intro=Die folgende Tabelle listet die Mindestanforderungen zum Ausf\u00FChren dieses Plugins auf:
 report.plugin.systemrequirements.nominimum=Keine Mindestanforderung.
 report.plugin.systemrequirements.maven=Maven
 report.plugin.systemrequirements.jdk=JDK
 report.plugin.systemrequirements.memory=Arbeitsspeicher
 report.plugin.systemrequirements.diskspace=Festplatte
 
+report.plugin.systemrequirements.history=Historie der Systemvoraussetzungen
+report.plugin.systemrequirements.history.intro=In der folgenden Tabelle sind die Mindestanforderungen zum Ausf\u00FChren dieses Plug-ins f\u00FCr historische Versionen aufgef\u00FChrt:
+report.plugin.systemrequirements.history.version=Plugin Version
+report.plugin.systemrequirements.history.maven=Maven
+report.plugin.systemrequirements.history.jdk=JDK
+
 report.plugin.usage=Gebrauch
-report.plugin.usage.intro=Geben Sie die gew\u00fcnschte Version einfach in der Plugin-Konfiguration Ihres Projekts an:
+report.plugin.usage.intro=Geben Sie die gew\u00FCnschte Version einfach in der Plugin-Konfiguration Ihres Projekts an:
 report.plugin.usage.pluginManagement=Zum Definieren der Plugin-Version in der Eltern-POM
-report.plugin.usage.plugins=Zum Verwenden der Plugin-Goals w\u00e4hrend des Build-Vorgangs eines Projekts
-report.plugin.usage.reporting=Zum Erzeugen der Berichte f\u00fcr die Projektdokumentation
-report.plugin.configuration.end=F\u00fcr weitergehende Informationen lesen Sie bitte den Artikel {"Guide to Configuring Plug-ins", https://maven.apache.org/guides/mini/guide-configuring-plugins.html}.
+report.plugin.usage.plugins=Zum Verwenden der Plugin-Goals w\u00E4hrend des Build-Vorgangs eines Projekts
+report.plugin.usage.reporting=Zum Erzeugen der Berichte f\u00FCr die Projektdokumentation
+report.plugin.configuration.end=F\u00FCr weitergehende Informationen lesen Sie bitte den Artikel {"Guide to Configuring Plug-ins", https://maven.apache.org/guides/mini/guide-configuring-plugins.html}.
 
 report.plugin.isReport=Ja
 report.plugin.isNotReport=Nein
diff --git a/maven-plugin-plugin/src/main/resources/plugin-report_fr.properties b/maven-plugin-plugin/src/main/resources/plugin-report_fr.properties
index 9474deab..2ac7b3fb 100644
--- a/maven-plugin-plugin/src/main/resources/plugin-report_fr.properties
+++ b/maven-plugin-plugin/src/main/resources/plugin-report_fr.properties
@@ -18,7 +18,7 @@
 #
 
 report.plugin.name=Documentation du plugin
-report.plugin.description=Ce rapport fournit de la documentation sur les goals et les param\u00eatres d'un plugin.
+report.plugin.description=Ce rapport fournit de la documentation sur les goals et les param\u00EAtres d'un plugin.
 report.plugin.title=Documentation du plugin
 
 report.plugin.goals.nogoal=Aucun goal disponible.
@@ -27,19 +27,25 @@ report.plugin.goals.column.goal=Goal
 report.plugin.goals.column.isMavenReport=Rapport?
 report.plugin.goals.column.description=Description
 report.plugin.goal.nodescription=Pas de description.
-report.plugin.goal.deprecated=Obsol\u00e8te.
+report.plugin.goal.deprecated=Obsol\u00E8te.
 
-report.plugin.systemrequirements=Exigences Syst\u00e8mes
-report.plugin.systemrequirements.intro=Ce qui suit sp\u00e9cifie les exigences minimales pour ex\u00e9cuter ce plugin Maven :
+report.plugin.systemrequirements=Exigences Syst\u00E8mes
+report.plugin.systemrequirements.intro=Ce qui suit sp\u00E9cifie les exigences minimales pour ex\u00E9cuter ce plugin Maven :
 report.plugin.systemrequirements.nominimum= Aucune exigence minimale.
 report.plugin.systemrequirements.maven=Maven
 report.plugin.systemrequirements.jdk=JDK
-report.plugin.systemrequirements.memory=M\u00e9moire
+report.plugin.systemrequirements.memory=M\u00E9moire
 report.plugin.systemrequirements.diskspace=Espace Disque
 
+report.plugin.systemrequirements.history=Historique des Exigences Syst\u00E8mes
+report.plugin.systemrequirements.history.intro=Ce qui suit sp\u00E9cifie les exigences minimales pour ex\u00E9cuter ce plugin Maven pour les versions historiques:
+report.plugin.systemrequirements.history.version=Version du Plugin
+report.plugin.systemrequirements.history.maven=Maven
+report.plugin.systemrequirements.history.jdk=JDK
+
 report.plugin.usage=Utilisation
-report.plugin.usage.intro=Vous devez sp\u00e9cifier la version dans la configuration de votre projet :
-report.plugin.usage.pluginManagement=Pour d\u00e9finir la version du plugin dans le POM parent
+report.plugin.usage.intro=Vous devez sp\u00E9cifier la version dans la configuration de votre projet :
+report.plugin.usage.pluginManagement=Pour d\u00E9finir la version du plugin dans le POM parent
 report.plugin.usage.plugins=Pour utiliser les goals du plugin dans votre POM ou POM parent
 report.plugin.usage.reporting=Pour utiliser les goals de rapports dans votre POM ou POM parent
 report.plugin.configuration.end=Pour plus d'informations, consultez {"Guide to Configuring Plug-ins", https://maven.apache.org/guides/mini/guide-configuring-plugins.html}
diff --git a/maven-plugin-plugin/src/main/resources/plugin-report_sv.properties b/maven-plugin-plugin/src/main/resources/plugin-report_sv.properties
index 15ff650b..0e806e49 100644
--- a/maven-plugin-plugin/src/main/resources/plugin-report_sv.properties
+++ b/maven-plugin-plugin/src/main/resources/plugin-report_sv.properties
@@ -18,31 +18,37 @@
 #
 
 report.plugin.name=Plugindokumentation
-report.plugin.description=Denna rapport tillhandah�ller m�l- och parameterdokumentation f�r en plugin.
+report.plugin.description=Denna rapport tillhandah\u00E5ller m\u00E5l- och parameterdokumentation f\u00F6r en plugin.
 report.plugin.title=Plugindokumentation
 
-report.plugin.goals.nogoal=Inga m�l tillg�ngliga �nnu.
-report.plugin.goals.intro=Tillg�ngliga m�l f�r denna plugin:
-report.plugin.goals.column.goal=M�l
+report.plugin.goals.nogoal=Inga m\u00E5l tillg\u00E4ngliga \u00E4nnu.
+report.plugin.goals.intro=Tillg\u00E4ngliga m\u00E5l f\u00F6r denna plugin:
+report.plugin.goals.column.goal=M\u00E5l
 report.plugin.goals.column.isMavenReport=Rapport?
 report.plugin.goals.column.description=Beskrivning
 report.plugin.goal.nodescription=Ingen beskrivning.
-report.plugin.goal.deprecated=F�r�ldrat.
+report.plugin.goal.deprecated=F\u00F6r\u00E5ldrat.
 
 report.plugin.systemrequirements=Systemkrav
-report.plugin.systemrequirements.intro=F�ljande minimikrav st�lls f�r att k�ra denna Maven plugin:
+report.plugin.systemrequirements.intro=F\u00F6ljande minimikrav st\u00E4lls f\u00F6r att k\u00F6ra denna Maven plugin:
 report.plugin.systemrequirements.nominimum= Inga minimikrav.
 report.plugin.systemrequirements.maven=Maven
 report.plugin.systemrequirements.jdk=JDK
 report.plugin.systemrequirements.memory=Minne
 report.plugin.systemrequirements.diskspace=Diskutrymme
 
-report.plugin.usage=Anv�ndning
-report.plugin.usage.intro=Du b�r specificera versionen i ditt projekts pluginkonfiguration:
-report.plugin.usage.pluginManagement=F�r att definiera pluginversion i din f�r�ldra-POM
-report.plugin.usage.plugins=F�r att anv�nda plugin-m�len i din POM eller f�r�ldra-POM
-report.plugin.usage.reporting=F�r att anv�nda rapport-m�len i din POM eller f�r�ldra-POM
-report.plugin.configuration.end=F�r mer information, l�s {"Guide to Configuring Plug-ins", https://maven.apache.org/guides/mini/guide-configuring-plugins.html} (p� engelska).
+report.plugin.systemrequirements.history=Systemkravshistorik
+report.plugin.systemrequirements.history.intro=F\u00F6ljande anger minimikraven f\u00F6r att k\u00F6ra detta Maven-plugin f\u00F6r historiska versioner:
+report.plugin.systemrequirements.history.version=Plugin Version
+report.plugin.systemrequirements.history.maven=Maven
+report.plugin.systemrequirements.history.jdk=JDK
+
+report.plugin.usage=Anv\u00E4ndning
+report.plugin.usage.intro=Du b\u00F6r specificera versionen i ditt projekts pluginkonfiguration:
+report.plugin.usage.pluginManagement=F\u00F6r att definiera pluginversion i din f\u00F6r\u00E4ldra-POM
+report.plugin.usage.plugins=F\u00F6r att anv\u00E4nda plugin-m\u00E5len i din POM eller f\u00F6r\u00E4ldra-POM
+report.plugin.usage.reporting=F\u00F6r att anv\u00E4nda rapport-m\u00E5len i din POM eller f\u00F6r\u00E4ldra-POM
+report.plugin.configuration.end=F\u00F6r mer information, l\u00E4s {"Guide to Configuring Plug-ins", https://maven.apache.org/guides/mini/guide-configuring-plugins.html} (p\u00E5 engelska).
 
 report.plugin.isReport=Ja
 report.plugin.isNotReport=Nej
diff --git a/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/report/RequirementsHistoryTest.java b/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/report/RequirementsHistoryTest.java
new file mode 100644
index 00000000..252c9449
--- /dev/null
+++ b/maven-plugin-plugin/src/test/java/org/apache/maven/plugin/plugin/report/RequirementsHistoryTest.java
@@ -0,0 +1,78 @@
+package org.apache.maven.plugin.plugin.report;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.stream.Stream;
+
+import org.apache.maven.reporting.MavenReportException;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.params.provider.Arguments.arguments;
+
+/**
+ * Tests for {@link RequirementsHistory}
+ *
+ * @author Slawomir Jaranowski
+ */
+class RequirementsHistoryTest
+{
+    private RequirementsHistory requirementsHistory = new RequirementsHistory();
+
+    public static Stream<String> invalidHistoryItemShouldThrowException()
+    {
+        return Stream.of( "", "  ", " invalid format" );
+    }
+
+    @ParameterizedTest
+    @MethodSource
+    void invalidHistoryItemShouldThrowException( String value ) throws MavenReportException
+    {
+        assertThrows( MavenReportException.class, () -> requirementsHistory.set( value ) );
+    }
+
+    public static Stream<Arguments> shouldParseHistoryItem()
+    {
+        return Stream.of(
+            arguments( "1.0.0 requires Maven 3.8.6 and JDK 1.8",
+                       "1.0.0", "3.8.6", "1.8" ),
+            arguments( " 1.0.0  requires Maven  3.8.6 and JDK 1.8 ",
+                       "1.0.0", "3.8.6", "1.8" ),
+            arguments( "1.2-beta requires Maven   3.8.6  and  JDK 1.8-ea",
+                       "1.2-beta", "3.8.6", "1.8-ea" ),
+            arguments( "1.2 beta requires  Maven   3.8.6 Beta  and  JDK 1.8 EA",
+                       "1.2 beta", "3.8.6 Beta", "1.8 EA" )
+        );
+    }
+
+    @ParameterizedTest
+    @MethodSource
+    void shouldParseHistoryItem( String value, String version, String maven, String jdk ) throws MavenReportException
+    {
+        requirementsHistory.set( value );
+
+        assertEquals( version, requirementsHistory.getVersion() );
+        assertEquals( maven, requirementsHistory.getMaven() );
+        assertEquals( jdk, requirementsHistory.getJdk() );
+    }
+}
diff --git a/pom.xml b/pom.xml
index c1ea31da..0395708f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -247,10 +247,11 @@
         <scope>test</scope>
       </dependency>
       <dependency>
-        <groupId>org.junit.jupiter</groupId>
-        <artifactId>junit-jupiter-engine</artifactId>
+        <groupId>org.junit</groupId>
+        <artifactId>junit-bom</artifactId>
         <version>5.8.2</version>
-        <scope>test</scope>
+        <type>pom</type>
+        <scope>import</scope>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>