summaryrefslogtreecommitdiffstats
path: root/vespa-enforcer-extensions
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2022-11-11 16:25:44 +0100
committerBjørn Christian Seime <bjorncs@yahooinc.com>2022-11-11 16:25:44 +0100
commit21ee68311b885074f0c35c3b0b46a9cb31b3f695 (patch)
treed94b209bfb4b04436435db987886e2d04a3e914b /vespa-enforcer-extensions
parentb9d99fdfd3fad567c6b87fbafcd7a075c53d298a (diff)
Ensure enforcer is executed from root of aggregator pom
Diffstat (limited to 'vespa-enforcer-extensions')
-rw-r--r--vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java28
-rw-r--r--vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java14
2 files changed, 30 insertions, 12 deletions
diff --git a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java
index 0f22e6e42be..0a6d0221110 100644
--- a/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java
+++ b/vespa-enforcer-extensions/src/main/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjects.java
@@ -50,7 +50,7 @@ public class EnforceDependenciesAllProjects implements EnforcerRule {
writeDependencySpec(specFile, dependencies);
log.info("Updated spec file '%s'".formatted(specFile.toString()));
} else {
- validateDependencies(dependencies, specFile);
+ validateDependencies(dependencies, specFile, projectName(helper));
}
log.info("The dependency enforcer completed successfully");
}
@@ -87,7 +87,7 @@ public class EnforceDependenciesAllProjects implements EnforcerRule {
@Override public int compareTo(Dependency o) { return COMPARATOR.compare(this, o); }
}
- static void validateDependencies(SortedSet<Dependency> dependencies, Path specFile)
+ static void validateDependencies(SortedSet<Dependency> dependencies, Path specFile, String moduleName)
throws EnforcerRuleException {
SortedSet<Dependency> allowedDependencies = loadDependencySpec(specFile);
SortedSet<Dependency> forbiddenDependencies = new TreeSet<>(dependencies);
@@ -105,10 +105,10 @@ public class EnforceDependenciesAllProjects implements EnforcerRule {
removeDependencies.forEach(d -> errorMsg.append(" - ").append(d.asString()).append('\n'));
}
throw new EnforcerRuleException(
- errorMsg.append("Maven dependency validation failed. To update dependency spec run " +
- "'mvn enforcer:enforce -D")
- .append(WRITE_SPEC_PROP).append("'")
- .toString());
+ errorMsg.append("Maven dependency validation failed. ")
+ .append("To update dependency spec execute following the command from root of aggregator pom:\n")
+ .append("$ mvn enforcer:enforce -D").append(WRITE_SPEC_PROP).append(" -pl ")
+ .append(moduleName).append("\n").toString());
}
}
@@ -122,7 +122,12 @@ public class EnforceDependenciesAllProjects implements EnforcerRule {
SortedSet<Dependency> dependencies = new TreeSet<>();
MavenSession session = (MavenSession) helper.evaluate("${session}");
var graphBuilder = helper.getComponent(DependencyGraphBuilder.class);
- for (MavenProject project : session.getAllProjects()) {
+ List<MavenProject> projects = session.getAllProjects();
+ if (projects.size() == 1) {
+ throw new EnforcerRuleException(
+ "Only a single Maven module detected. Enforcer must be executed from root of aggregator pom.");
+ }
+ for (MavenProject project : projects) {
var req = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
req.setProject(project);
DependencyNode root = graphBuilder.buildDependencyGraph(req, null);
@@ -155,6 +160,15 @@ public class EnforceDependenciesAllProjects implements EnforcerRule {
}
}
+ private static String projectName(EnforcerRuleHelper helper) throws EnforcerRuleException {
+ try {
+ MavenProject p = (MavenProject) helper.evaluate("${project}");
+ return p.getModules().isEmpty() ? p.getName() : ".";
+ } catch (ExpressionEvaluationException e) {
+ throw new EnforcerRuleException(e.getMessage(), e);
+ }
+ }
+
static void writeDependencySpec(Path specFile, SortedSet<Dependency> dependencies)
throws EnforcerRuleException {
try (var out = Files.newBufferedWriter(specFile)) {
diff --git a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java
index a6d6661071e..81e22d81f44 100644
--- a/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java
+++ b/vespa-enforcer-extensions/src/test/java/com/yahoo/vespa/maven/plugin/enforcer/EnforceDependenciesAllProjectsTest.java
@@ -31,7 +31,7 @@ class EnforceDependenciesAllProjectsTest {
Dependency.fromString("com.example:foo:1.2.3"),
Dependency.fromString("com.example:bar:2.3.4")));
Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt");
- assertDoesNotThrow(() -> validateDependencies(dependencies, specFile));
+ assertDoesNotThrow(() -> validateDependencies(dependencies, specFile, "my-dep-enforcer"));
}
@Test
@@ -42,13 +42,15 @@ class EnforceDependenciesAllProjectsTest {
Dependency.fromString("com.example:foobar:3.4.5")));
Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt");
var exception = assertThrows(EnforcerRuleException.class,
- () -> validateDependencies(dependencies, specFile));
+ () -> validateDependencies(dependencies, specFile, "my-dep-enforcer"));
String expectedErrorMessage =
"""
The dependency enforcer failed:
Forbidden dependencies:
- com.example:foobar:3.4.5
- Maven dependency validation failed. To update dependency spec run 'mvn enforcer:enforce -DdependencyEnforcer.writeSpec'""";
+ Maven dependency validation failed. To update dependency spec execute following the command from root of aggregator pom:
+ $ mvn enforcer:enforce -DdependencyEnforcer.writeSpec -pl my-dep-enforcer
+ """;
assertEquals(expectedErrorMessage, exception.getMessage());
}
@@ -58,13 +60,15 @@ class EnforceDependenciesAllProjectsTest {
Dependency.fromString("com.example:foo:1.2.3")));
Path specFile = Paths.get("src/test/resources/allowed-dependencies.txt");
var exception = assertThrows(EnforcerRuleException.class,
- () -> validateDependencies(dependencies, specFile));
+ () -> validateDependencies(dependencies, specFile, "my-dep-enforcer"));
String expectedErrorMessage =
"""
The dependency enforcer failed:
Removed dependencies:
- com.example:bar:2.3.4
- Maven dependency validation failed. To update dependency spec run 'mvn enforcer:enforce -DdependencyEnforcer.writeSpec'""";
+ Maven dependency validation failed. To update dependency spec execute following the command from root of aggregator pom:
+ $ mvn enforcer:enforce -DdependencyEnforcer.writeSpec -pl my-dep-enforcer
+ """;
assertEquals(expectedErrorMessage, exception.getMessage());
}