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>
 

Reply via email to