[MPLUGIN-511] add versions history requirements detection · apache/maven-plugin-tools@cd74761 (original) (raw)
`@@ -23,10 +23,13 @@
`
23
23
`import java.io.Reader;
`
24
24
`import java.nio.file.Files;
`
25
25
`import java.util.ArrayList;
`
``
26
`+
import java.util.Collections;
`
26
27
`import java.util.List;
`
27
28
`import java.util.Locale;
`
``
29
`+
import java.util.stream.Collectors;
`
28
30
``
29
31
`import org.apache.maven.RepositoryUtils;
`
``
32
`+
import org.apache.maven.artifact.ArtifactUtils;
`
30
33
`import org.apache.maven.doxia.sink.Sink;
`
31
34
`import org.apache.maven.execution.MavenSession;
`
32
35
`import org.apache.maven.model.building.ModelBuildingRequest;
`
`@@ -44,7 +47,6 @@
`
44
47
`import org.apache.maven.project.ProjectBuilder;
`
45
48
`import org.apache.maven.project.ProjectBuildingException;
`
46
49
`import org.apache.maven.project.ProjectBuildingRequest;
`
47
``
`-
import org.apache.maven.project.ProjectBuildingResult;
`
48
50
`import org.apache.maven.reporting.AbstractMavenReport;
`
49
51
`import org.apache.maven.reporting.MavenReportException;
`
50
52
`import org.apache.maven.rtinfo.RuntimeInformation;
`
`@@ -108,6 +110,14 @@ public class PluginReport extends AbstractMavenReport {
`
108
110
`@Parameter
`
109
111
`private List requirementsHistories = new ArrayList<>();
`
110
112
``
``
113
`+
/**
`
``
114
`+
- Plugin's version range for automatic detection of requirements history.
`
``
115
`+
`
``
116
`+
- @since 3.12.0
`
``
117
`+
*/
`
``
118
`+
@Parameter(defaultValue = "[0,)")
`
``
119
`+
private String requirementsHistoryDetectionRange;
`
``
120
+
111
121
`@Component
`
112
122
`private RuntimeInformation rtInfo;
`
113
123
``
`@@ -174,6 +184,30 @@ protected void executeReport(Locale locale) throws MavenReportException {
`
174
184
`// Generate the mojos' documentation
`
175
185
`generateMojosDocumentation(pluginDescriptor, locale);
`
176
186
``
``
187
`+
if (requirementsHistories.isEmpty()) {
`
``
188
`+
// detect requirements history
`
``
189
`+
String v = null;
`
``
190
`+
try {
`
``
191
`+
List versions = discoverVersions(requirementsHistoryDetectionRange);
`
``
192
`+
getLog().info("Detecting requirements history for " + requirementsHistoryDetectionRange + ": "
`
``
193
`+
- versions.size());
`
``
194
+
``
195
`+
Collections.reverse(versions);
`
``
196
`+
for (Version version : versions) {
`
``
197
`+
v = version.toString();
`
``
198
`+
MavenProject versionProject = buildMavenProject(v);
`
``
199
`+
RequirementsHistory requirements = RequirementsHistory.discoverRequirements(versionProject);
`
``
200
`+
requirementsHistories.add(requirements);
`
``
201
`+
getLog().info(" - " + requirements);
`
``
202
`+
}
`
``
203
`+
} catch (VersionRangeResolutionException vrre) {
`
``
204
`+
throw new MavenReportException(
`
``
205
`+
"Cannot resolve past versions " + requirementsHistoryDetectionRange, vrre);
`
``
206
`+
} catch (ProjectBuildingException pbe) {
`
``
207
`+
throw new MavenReportException("Cannot resolve MavenProject for version " + v, pbe);
`
``
208
`+
}
`
``
209
`+
}
`
``
210
+
177
211
`// Write the overview
`
178
212
`PluginOverviewRenderer r = new PluginOverviewRenderer(
`
179
213
`getSink(), i18n, locale, getProject(), requirementsHistories, pluginDescriptor, hasExtensionsToLoad);
`
`@@ -257,19 +291,21 @@ private void generateMojosDocumentation(PluginDescriptor pluginDescriptor, Local
`
257
291
` }
`
258
292
` }
`
259
293
``
260
``
`-
private List discoverVersions() throws VersionRangeResolutionException {
`
``
294
`+
private List discoverVersions(String range) throws VersionRangeResolutionException {
`
261
295
`MavenProject currentProject = mavenSession.getCurrentProject();
`
262
296
`VersionRangeRequest rangeRequest = new VersionRangeRequest();
`
263
297
`rangeRequest.setArtifact(
`
264
``
`-
new DefaultArtifact(currentProject.getGroupId() + ":" + currentProject.getArtifactId() + ":[0,)"));
`
``
298
`+
new DefaultArtifact(currentProject.getGroupId() + ":" + currentProject.getArtifactId() + ":" + range));
`
265
299
`rangeRequest.setRepositories(
`
266
300
`RepositoryUtils.toRepos(mavenSession.getCurrentProject().getRemoteArtifactRepositories()));
`
267
301
`VersionRangeResult rangeResult =
`
268
302
`repositorySystem.resolveVersionRange(mavenSession.getRepositorySession(), rangeRequest);
`
269
``
`-
return rangeResult.getVersions();
`
``
303
`+
return rangeResult.getVersions().stream()
`
``
304
`+
.filter(version -> !ArtifactUtils.isSnapshot(version.toString()))
`
``
305
`+
.collect(Collectors.toList());
`
270
306
` }
`
271
307
``
272
``
`-
private ProjectBuildingResult buildMavenProject(String version) throws ProjectBuildingException {
`
``
308
`+
private MavenProject buildMavenProject(String version) throws ProjectBuildingException {
`
273
309
`MavenProject currentProject = mavenSession.getCurrentProject();
`
274
310
`ProjectBuildingRequest buildRequest = new DefaultProjectBuildingRequest();
`
275
311
`buildRequest.setLocalRepository(mavenSession.getLocalRepository());
`
`@@ -280,9 +316,11 @@ private ProjectBuildingResult buildMavenProject(String version) throws ProjectBu
`
280
316
`buildRequest.setSystemProperties(mavenSession.getSystemProperties());
`
281
317
`buildRequest.setUserProperties(mavenSession.getUserProperties());
`
282
318
`buildRequest.setRepositorySession(mavenSession.getRepositorySession());
`
283
``
`-
return projectBuilder.build(
`
284
``
`-
RepositoryUtils.toArtifact(new DefaultArtifact(
`
285
``
`-
currentProject.getGroupId() + ":" + currentProject.getArtifactId() + ":pom:" + version)),
`
286
``
`-
buildRequest);
`
``
319
`+
return projectBuilder
`
``
320
`+
.build(
`
``
321
`+
RepositoryUtils.toArtifact(new DefaultArtifact(currentProject.getGroupId() + ":"
`
``
322
`+
- currentProject.getArtifactId() + ":pom:" + version)),
`
``
323
`+
buildRequest)
`
``
324
`+
.getProject();
`
287
325
` }
`
288
326
`}
`