Skip to content

Commit

Permalink
[MPLUGIN-511] add versions history requirements detection
Browse files Browse the repository at this point in the history
  • Loading branch information
hboutemy committed Mar 6, 2024
1 parent f44cc91 commit ed74bdd
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@
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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -174,6 +176,24 @@ protected void executeReport(Locale locale) throws MavenReportException {
// 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);
Expand Down Expand Up @@ -257,19 +277,20 @@ private void generateMojosDocumentation(PluginDescriptor pluginDescriptor, Local
}
}

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 =
repositorySystem.resolveVersionRange(mavenSession.getRepositorySession(), rangeRequest);
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());
Expand All @@ -280,9 +301,11 @@ private ProjectBuildingResult buildMavenProject(String version) throws ProjectBu
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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,23 @@ public String toString() {
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())
Expand All @@ -100,7 +107,7 @@ public static String discoverMavenRequirement(MavenProject project, PluginDescri
* </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) {
Expand All @@ -118,33 +125,28 @@ public static String discoverJdkRequirement(MavenProject project, PluginDescript
}

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) {
Expand Down
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit ed74bdd

Please sign in to comment.