This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch feature/enforce-same-module-versions in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git
commit 90e0b8767568be654a7a518c041f52f3884aa56a Author: Konrad Windszus <k...@apache.org> AuthorDate: Tue Jul 30 17:34:21 2024 +0200 [MENFORCER-508] Add option to enforce same versions among Maven modules --- enforcer-api/pom.xml | 2 +- enforcer-rules/pom.xml | 2 +- .../maven/enforcer/rules/RequireSameVersions.java | 19 ++++++++++++++++--- .../src/site/apt/requireSameVersions.apt.vm | 4 +++- maven-enforcer-extension/pom.xml | 2 +- maven-enforcer-plugin/pom.xml | 2 +- pom.xml | 4 ++-- 7 files changed, 25 insertions(+), 10 deletions(-) diff --git a/enforcer-api/pom.xml b/enforcer-api/pom.xml index 1893e0d..f574b79 100644 --- a/enforcer-api/pom.xml +++ b/enforcer-api/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.maven.enforcer</groupId> <artifactId>enforcer</artifactId> - <version>3.5.1-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> </parent> <artifactId>enforcer-api</artifactId> diff --git a/enforcer-rules/pom.xml b/enforcer-rules/pom.xml index 1655a11..fb54579 100644 --- a/enforcer-rules/pom.xml +++ b/enforcer-rules/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.maven.enforcer</groupId> <artifactId>enforcer</artifactId> - <version>3.5.1-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> </parent> <artifactId>enforcer-rules</artifactId> diff --git a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireSameVersions.java b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireSameVersions.java index 4e77e3e..82f6b3e 100644 --- a/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireSameVersions.java +++ b/enforcer-rules/src/main/java/org/apache/maven/enforcer/rules/RequireSameVersions.java @@ -33,6 +33,7 @@ import java.util.regex.Pattern; import org.apache.maven.artifact.Artifact; import org.apache.maven.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; /** @@ -51,11 +52,16 @@ public final class RequireSameVersions extends AbstractStandardEnforcerRule { private Set<String> reportPlugins = new HashSet<>(); + private boolean sameModuleVersions; + private final MavenProject project; + private final MavenSession session; + @Inject - public RequireSameVersions(MavenProject project) { + public RequireSameVersions(MavenProject project, MavenSession session) { this.project = Objects.requireNonNull(project); + this.session = Objects.requireNonNull(session); } @Override @@ -85,6 +91,13 @@ public final class RequireSameVersions extends AbstractStandardEnforcerRule { } throw new EnforcerRuleException(builder.toString()); } + + if (sameModuleVersions) { + MavenProject topLevelProject = session.getTopLevelProject(); + if (project != topLevelProject && !Objects.equals(topLevelProject.getVersion(), project.getVersion())) { + throw new EnforcerRuleException("Top level project has version " + topLevelProject.getVersion() + " but current module has different version " + project.getVersion()); + } + } } private Map<String, List<String>> collectVersionMembers( @@ -119,7 +132,7 @@ public final class RequireSameVersions extends AbstractStandardEnforcerRule { @Override public String toString() { return String.format( - "RequireSameVersions[dependencies=%s, buildPlugins=%s, reportPlugins=%s, plugins=%s, uniqueVersions=%b]", - dependencies, buildPlugins, reportPlugins, plugins, uniqueVersions); + "RequireSameVersions[dependencies=%s, buildPlugins=%s, reportPlugins=%s, plugins=%s, uniqueVersions=%b, sameModuleVersions=%b]", + dependencies, buildPlugins, reportPlugins, plugins, uniqueVersions, sameModuleVersions); } } diff --git a/enforcer-rules/src/site/apt/requireSameVersions.apt.vm b/enforcer-rules/src/site/apt/requireSameVersions.apt.vm index e4e55a7..00a8062 100644 --- a/enforcer-rules/src/site/apt/requireSameVersions.apt.vm +++ b/enforcer-rules/src/site/apt/requireSameVersions.apt.vm @@ -37,8 +37,10 @@ * <<reportPlugins>> - an optional list of report plugin patterns * <<plugins>> - an optional list of both build and report plugin patterns - + * <<uniqueVersions>> - if SNAPSHOTs should be compared by their timestamped version or not. Default: false + + * <<sameModuleVersions>> - if set to true enforces that the current module has the same version as the top level aggregator project. Default: false. Supported since version 3.6.0 [] diff --git a/maven-enforcer-extension/pom.xml b/maven-enforcer-extension/pom.xml index 99786b2..be5d1cc 100644 --- a/maven-enforcer-extension/pom.xml +++ b/maven-enforcer-extension/pom.xml @@ -23,7 +23,7 @@ <parent> <groupId>org.apache.maven.enforcer</groupId> <artifactId>enforcer</artifactId> - <version>3.5.1-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> </parent> <groupId>org.apache.maven.extensions</groupId> <artifactId>maven-enforcer-extension</artifactId> diff --git a/maven-enforcer-plugin/pom.xml b/maven-enforcer-plugin/pom.xml index f90a96a..cacc3c6 100644 --- a/maven-enforcer-plugin/pom.xml +++ b/maven-enforcer-plugin/pom.xml @@ -24,7 +24,7 @@ <parent> <groupId>org.apache.maven.enforcer</groupId> <artifactId>enforcer</artifactId> - <version>3.5.1-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> </parent> <groupId>org.apache.maven.plugins</groupId> diff --git a/pom.xml b/pom.xml index ba051d0..8ef43f6 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ </parent> <groupId>org.apache.maven.enforcer</groupId> <artifactId>enforcer</artifactId> - <version>3.5.1-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Apache Maven Enforcer</name> @@ -81,7 +81,7 @@ <maven.site.path>enforcer-archives/enforcer-LATEST</maven.site.path> <javaVersion>8</javaVersion> <mockito.version>4.11.0</mockito.version> - <project.build.outputTimestamp>2024-05-26T17:46:08Z</project.build.outputTimestamp> + <project.build.outputTimestamp>2024-07-30T15:32:39Z</project.build.outputTimestamp> <!-- the same as Maven 3.6.3 --> <resolver.version>1.4.1</resolver.version>