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>