diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-11-11 16:25:44 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2022-11-11 16:25:44 +0100 |
commit | 21ee68311b885074f0c35c3b0b46a9cb31b3f695 (patch) | |
tree | d94b209bfb4b04436435db987886e2d04a3e914b /vespa-enforcer-extensions/src | |
parent | b9d99fdfd3fad567c6b87fbafcd7a075c53d298a (diff) |
Ensure enforcer is executed from root of aggregator pom
Diffstat (limited to 'vespa-enforcer-extensions/src')
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()); } |