[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

`+

`

``

115

`+

`

``

116

`+

`

``

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

`+

`

``

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

`+

`

``

323

`+

buildRequest)

`

``

324

`+

.getProject();

`

287

325

` }

`

288

326

`}

`