Skip to content

Commit

Permalink
Review
Browse files Browse the repository at this point in the history
  • Loading branch information
ivy-lli committed Dec 18, 2024
1 parent b2a4970 commit 9449010
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 30 deletions.
52 changes: 28 additions & 24 deletions src/main/java/ch/ivyteam/ivy/maven/validate/ValidateMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
Expand All @@ -32,36 +35,37 @@ public void execute() throws MojoExecutionException, MojoFailureException {
}

protected void validateConsistentPluginVersion(List<MavenProject> projects) throws MojoExecutionException {
Map<String, Set<MavenProject>> versionToProjectsMap = new HashMap<>();
var versionToProjectsMap = new HashMap<String, Set<MavenProject>>();
for (var project : projects) {
for (var plugin : project.getBuild().getPlugins()) {
if (PLUGIN_GROUPID.equals(plugin.getGroupId()) && PLUGIN_ARTIFACTID.equals(plugin.getArtifactId())) {
var version = plugin.getVersion();
// Skip checking plug ins that do not have a version
if (version == null) {
continue;
}
getLog().debug(PLUGIN_GROUPID + ":" + plugin.getArtifactId() + ":" + version + " configured in " + project);
var projectSet = versionToProjectsMap.get(version);
if (projectSet == null) {
projectSet = new LinkedHashSet<>();
versionToProjectsMap.put(version, projectSet);
}
projectSet.add(project);
}
}
findProjectBuildPlugin(project.getBuild().getPlugins()).ifPresent(plugin -> {
var version = plugin.getVersion();
getLog().debug(PLUGIN_GROUPID + ":" + plugin.getArtifactId() + ":" + version + " configured in " + project);
var projectSet = versionToProjectsMap.computeIfAbsent(version, v -> new LinkedHashSet<>());
projectSet.add(project);
});
}
if (versionToProjectsMap.size() > 1) {
var versions = new ArrayList<>(versionToProjectsMap.keySet());
Collections.sort(versions);
getLog().error("Several versions of project-build-plugins are configured " + versions + ":");
for (var version : versions) {
getLog().error(version + ":");
for (var project : versionToProjectsMap.get(version)) {
getLog().error("\t" + project.toString());
}
}
var error = "Several versions of project-build-plugins are configured " + versions + ":\n";
error += versions.stream().map(v -> versionProjects(versionToProjectsMap, v)).collect(Collectors.joining("\n"));
getLog().error(error);
throw new MojoExecutionException("All project-build-plugins configured in one reactor must use the same version");
}
}

private Optional<Plugin> findProjectBuildPlugin(List<Plugin> plugins) {
return plugins.stream()
.filter(p -> PLUGIN_GROUPID.equals(p.getGroupId()) && PLUGIN_ARTIFACTID.equals(p.getArtifactId()))
.filter(p -> p.getVersion() != null) // Skip plug-ins that do not have a version
.findFirst();
}

private String versionProjects(Map<String, Set<MavenProject>> versionToProjectsMap, String version) {
return version + " -> [" +
versionToProjectsMap.get(version).stream()
.map(p -> p.getArtifactId())
.collect(Collectors.joining(", ")) +
"]";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,12 @@ public void differentPluginVersions() throws Exception {
var p2 = createMavenProject("project2", "12.0.1");
assertThatThrownBy(() -> mojo.validateConsistentPluginVersion(List.of(p1, p2)))
.isInstanceOf(MojoExecutionException.class);
assertThat(log.getErrors()).hasSize(5);
assertThat(log.getErrors().get(0).toString()).isEqualTo("Several versions of project-build-plugins are configured [12.0.0, 12.0.1]:");
assertThat(log.getErrors().get(1).toString()).isEqualTo("12.0.0:");
assertThat(log.getErrors().get(2).toString()).contains("\tMavenProject: group:project1:12.0.0-SNAPSHOT");
assertThat(log.getErrors().get(3).toString()).isEqualTo("12.0.1:");
assertThat(log.getErrors().get(4).toString()).contains("\tMavenProject: group:project2:12.0.0-SNAPSHOT");
assertThat(log.getErrors()).hasSize(1);
assertThat(log.getErrors().get(0).toString())
.isEqualTo("""
Several versions of project-build-plugins are configured [12.0.0, 12.0.1]:
12.0.0 -> [project1]
12.0.1 -> [project2]""");
}

private MavenProject createMavenProject(String projectId, String version) {
Expand Down

0 comments on commit 9449010

Please sign in to comment.