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

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


The following commit(s) were added to refs/heads/MPLUGIN-511-2 by this push:
     new ed74bddc [MPLUGIN-511] add versions history requirements detection
ed74bddc is described below

commit ed74bddca48df01a64241e02712f740d7742b7fe
Author: Hervé Boutemy <hbout...@apache.org>
AuthorDate: Wed Mar 6 02:18:47 2024 +0100

    [MPLUGIN-511] add versions history requirements detection
---
 .../maven/plugin/plugin/report/PluginReport.java   | 39 +++++++++++++++----
 .../plugin/plugin/report/RequirementsHistory.java  | 44 +++++++++++-----------
 pom.xml                                            |  5 +++
 3 files changed, 59 insertions(+), 29 deletions(-)

diff --git 
a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
 
b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
index 3c47a3cf..c0fe449f 100644
--- 
a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
+++ 
b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/PluginReport.java
@@ -44,7 +44,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ProjectBuildingRequest;
-import org.apache.maven.project.ProjectBuildingResult;
 import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.maven.rtinfo.RuntimeInformation;
@@ -108,6 +107,9 @@ public class PluginReport extends AbstractMavenReport {
     @Parameter
     private List<RequirementsHistory> requirementsHistories = new 
ArrayList<>();
 
+    @Parameter(defaultValue = "[0,)")
+    private String detectRequirementsHistory;
+
     @Component
     private RuntimeInformation rtInfo;
 
@@ -174,6 +176,24 @@ public class PluginReport extends AbstractMavenReport {
         // Generate the mojos' documentation
         generateMojosDocumentation(pluginDescriptor, locale);
 
+        String v = null;
+        try {
+            List<Version> versions = 
discoverVersions(detectRequirementsHistory);
+            getLog().info("Detecting requirements history for " + 
detectRequirementsHistory + ": " + versions.size());
+
+            for (Version version : versions) {
+                v = version.toString();
+                MavenProject versionProject = buildMavenProject(v);
+                RequirementsHistory requirements = 
RequirementsHistory.discoverRequirements(versionProject);
+                requirementsHistories.add(requirements);
+                getLog().info("- " + requirements);
+            }
+        } catch (VersionRangeResolutionException vrre) {
+            throw new MavenReportException("Cannot resolve past versions " + 
detectRequirementsHistory, vrre);
+        } catch (ProjectBuildingException pbe) {
+            throw new MavenReportException("Cannot resolve MavenProject for 
version " + v, pbe);
+        }
+
         // Write the overview
         PluginOverviewRenderer r = new PluginOverviewRenderer(
                 getSink(), i18n, locale, getProject(), requirementsHistories, 
pluginDescriptor, hasExtensionsToLoad);
@@ -257,11 +277,12 @@ public class PluginReport extends AbstractMavenReport {
         }
     }
 
-    private List<Version> discoverVersions() throws 
VersionRangeResolutionException {
+    private List<Version> discoverVersions(String range) throws 
VersionRangeResolutionException {
         MavenProject currentProject = mavenSession.getCurrentProject();
         VersionRangeRequest rangeRequest = new VersionRangeRequest();
         rangeRequest.setArtifact(
-                new DefaultArtifact(currentProject.getGroupId() + ":" + 
currentProject.getArtifactId() + ":[0,)"));
+                new DefaultArtifact(currentProject.getGroupId() + ":" + 
currentProject.getArtifactId() + ":" + range));
+        // TODO do not use snapshots
         rangeRequest.setRepositories(
                 
RepositoryUtils.toRepos(mavenSession.getCurrentProject().getRemoteArtifactRepositories()));
         VersionRangeResult rangeResult =
@@ -269,7 +290,7 @@ public class PluginReport extends AbstractMavenReport {
         return rangeResult.getVersions();
     }
 
-    private ProjectBuildingResult buildMavenProject(String version) throws 
ProjectBuildingException {
+    private MavenProject buildMavenProject(String version) throws 
ProjectBuildingException {
         MavenProject currentProject = mavenSession.getCurrentProject();
         ProjectBuildingRequest buildRequest = new 
DefaultProjectBuildingRequest();
         buildRequest.setLocalRepository(mavenSession.getLocalRepository());
@@ -280,9 +301,11 @@ public class PluginReport extends AbstractMavenReport {
         buildRequest.setSystemProperties(mavenSession.getSystemProperties());
         buildRequest.setUserProperties(mavenSession.getUserProperties());
         buildRequest.setRepositorySession(mavenSession.getRepositorySession());
-        return projectBuilder.build(
-                RepositoryUtils.toArtifact(new DefaultArtifact(
-                        currentProject.getGroupId() + ":" + 
currentProject.getArtifactId() + ":pom:" + version)),
-                buildRequest);
+        return projectBuilder
+                .build(
+                        RepositoryUtils.toArtifact(new 
DefaultArtifact(currentProject.getGroupId() + ":"
+                                + currentProject.getArtifactId() + ":pom:" + 
version)),
+                        buildRequest)
+                .getProject();
     }
 }
diff --git 
a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
 
b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
index 9f62910b..3743a35b 100644
--- 
a/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
+++ 
b/maven-plugin-report-plugin/src/main/java/org/apache/maven/plugin/plugin/report/RequirementsHistory.java
@@ -72,16 +72,23 @@ public class RequirementsHistory {
         return sb.toString();
     }
 
+    public static RequirementsHistory discoverRequirements(MavenProject 
project) {
+        RequirementsHistory req = new RequirementsHistory();
+        req.version = project.getVersion();
+        req.jdk = discoverJdkRequirement(project, null);
+        req.maven = discoverMavenRequirement(project, null);
+        return req;
+    }
     /**
      * Tries to determine the Maven requirement from either the plugin 
descriptor or (if not set) from the
      * Maven prerequisites element in the POM.
      *
      * @param project      not null
-     * @param pluginDescriptor the plugin descriptor (not null)
+     * @param pluginDescriptor the plugin descriptor (can be null)
      * @return the Maven version or null if not specified
      */
     public static String discoverMavenRequirement(MavenProject project, 
PluginDescriptor pluginDescriptor) {
-        if 
(StringUtils.isNotBlank(pluginDescriptor.getRequiredMavenVersion())) {
+        if (pluginDescriptor != null && 
StringUtils.isNotBlank(pluginDescriptor.getRequiredMavenVersion())) {
             return pluginDescriptor.getRequiredMavenVersion();
         }
         return Optional.ofNullable(project.getPrerequisites())
@@ -100,7 +107,7 @@ public class RequirementsHistory {
      * </ol>
      *
      * @param project      not null
-     * @param pluginDescriptor the plugin descriptor (not null)
+     * @param pluginDescriptor the plugin descriptor (can be null)
      * @return the JDK version
      */
     public static String discoverJdkRequirement(MavenProject project, 
PluginDescriptor pluginDescriptor) {
@@ -118,33 +125,28 @@ public class RequirementsHistory {
         }
 
         jdk = getPluginParameter(compiler, "release");
-        if (jdk != null) {
-            return jdk;
-        }
-
-        jdk = project.getProperties().getProperty("maven.compiler.release");
-        if (jdk != null) {
-            return jdk;
+        if (jdk == null) {
+            jdk = 
project.getProperties().getProperty("maven.compiler.release");
         }
 
-        jdk = getPluginParameter(compiler, "target");
-        if (jdk != null) {
-            return jdk;
+        if (jdk == null) {
+            jdk = getPluginParameter(compiler, "target");
         }
 
-        // default value
-        jdk = project.getProperties().getProperty("maven.compiler.target");
-        if (jdk != null) {
-            return jdk;
+        if (jdk == null) {
+            // default value
+            jdk = project.getProperties().getProperty("maven.compiler.target");
         }
 
-        String version = (compiler == null) ? null : compiler.getVersion();
+        if (jdk == null) {
+            String version = (compiler == null) ? null : compiler.getVersion();
 
-        if (version != null) {
-            return "Default target for maven-compiler-plugin version " + 
version;
+            if (version != null) {
+                return "Default target for maven-compiler-plugin version " + 
version;
+            }
         }
 
-        return null;
+        return jdk;
     }
 
     private static Plugin getCompilerPlugin(Map<String, Plugin> pluginsAsMap) {
diff --git a/pom.xml b/pom.xml
index 1650f7df..55f5ab68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -380,6 +380,11 @@
       <id>reporting</id>
       <reporting>
         <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-plugin-report-plugin</artifactId>
+            <version>${project.version}</version>
+          </plugin>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>

Reply via email to