This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-release.git


The following commit(s) were added to refs/heads/master by this push:
     new 5106eb19 Introduce new SemVer policies
5106eb19 is described below

commit 5106eb1936a9aa03515792170c897050a5647429
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Fri Nov 21 08:48:35 2025 +0100

    Introduce new SemVer policies
    
    - add more SemVer implementations
    - improve documentation
    - improve tests for version policies
---
 .../src/it/projects/prepare/oddeven-policy/pom.xml |  7 +--
 .../projects/prepare/oddeven-policy/verify.groovy  | 35 ++++++++++++++
 .../src/it/projects/prepare/semver-policy/pom.xml  |  7 +--
 .../projects/prepare/semver-policy/verify.groovy   | 35 ++++++++++++++
 .../maven/plugins/release/BranchReleaseMojo.java   |  2 +-
 .../maven/plugins/release/PrepareReleaseMojo.java  |  2 +-
 .../maven/plugins/release/UpdateVersionsMojo.java  |  1 +
 .../src/site/markdown/versioning-policies.md       | 54 ++++++++++++++++++++++
 maven-release-plugin/src/site/site.xml             |  1 +
 .../maven-release-oddeven-policy/pom.xml           |  5 ++
 .../oddeven/OddEvenVersionPolicyTestCase.java      | 43 +++++++++--------
 .../maven-release-semver-policy/pom.xml            | 30 +++++++++---
 .../semver/AbstarctSemVerVersionPolicy.java}       | 43 ++++++++---------
 ...va => SemVerMajorDevelopmentVersionPolicy.java} | 37 ++++-----------
 ...y.java => SemVerMajorReleaseVersionPolicy.java} | 37 ++++-----------
 ...va => SemVerMinorDevelopmentVersionPolicy.java} | 35 ++++----------
 ...y.java => SemVerMinorReleaseVersionPolicy.java} | 37 ++++-----------
 ...va => SemVerPatchDevelopmentVersionPolicy.java} | 37 ++++-----------
 .../release/policy/semver/SemVerVersionPolicy.java | 42 +++++------------
 ...> SemVerMajorDevelopmentVersionPolicyTest.java} | 36 ++++++++++-----
 ...va => SemVerMajorReleaseVersionPolicyTest.java} | 37 ++++++++++-----
 ...> SemVerMinorDevelopmentVersionPolicyTest.java} | 36 ++++++++++-----
 ...va => SemVerMinorReleaseVersionPolicyTest.java} | 35 +++++++++-----
 ...> SemVerPatchDevelopmentVersionPolicyTest.java} | 35 +++++++++-----
 .../policy/semver/SemVerVersionPolicyTest.java     | 31 +++++++++----
 src/site/markdown/index.md                         | 14 +++---
 26 files changed, 409 insertions(+), 305 deletions(-)

diff --git 
a/maven-release-plugin/src/it/projects/prepare/oddeven-policy/pom.xml 
b/maven-release-plugin/src/it/projects/prepare/oddeven-policy/pom.xml
index 2d0e7d86..e3545be6 100644
--- a/maven-release-plugin/src/it/projects/prepare/oddeven-policy/pom.xml
+++ b/maven-release-plugin/src/it/projects/prepare/oddeven-policy/pom.xml
@@ -22,7 +22,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.plugin.release.it</groupId>
   <artifactId>oddversion-policy</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>1.1-SNAPSHOT</version>
   <scm>
     <connection>scm:dummy|nul</connection>
     <developerConnection>scm:dummy|nul</developerConnection>
@@ -42,11 +42,6 @@
             <artifactId>maven-scm-provider-dummy</artifactId>
             <version>1.0</version>
           </dependency>
-          <dependency>
-            <groupId>org.apache.maven.release</groupId>
-            <artifactId>maven-release-oddeven-policy</artifactId>
-            <version>@project.version@</version>
-          </dependency>
         </dependencies>
       </plugin>
     </plugins>
diff --git 
a/maven-release-plugin/src/it/projects/prepare/oddeven-policy/verify.groovy 
b/maven-release-plugin/src/it/projects/prepare/oddeven-policy/verify.groovy
new file mode 100644
index 00000000..03bcea5f
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/oddeven-policy/verify.groovy
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import groovy.xml.XmlSlurper
+
+// The pom based version is NOT related to what the actual version will be.
+File pomXml = new File(basedir, 'pom.xml')
+assert pomXml.exists()
+assert new XmlSlurper().parse(pomXml).version.text() == "1.1-SNAPSHOT"
+
+// The actual version is hard coded
+File pomXmlTag = new File(basedir, 'pom.xml.tag')
+assert pomXmlTag.exists()
+assert new XmlSlurper().parse(pomXmlTag).version.text() == "1.2"
+
+// The next development version is hard coded
+File pomXmlNext = new File(basedir, 'pom.xml.next')
+assert pomXmlNext.exists()
+assert new XmlSlurper().parse(pomXmlNext).version.text() == "1.3-SNAPSHOT"
diff --git a/maven-release-plugin/src/it/projects/prepare/semver-policy/pom.xml 
b/maven-release-plugin/src/it/projects/prepare/semver-policy/pom.xml
index 53059f7a..4e3d901e 100644
--- a/maven-release-plugin/src/it/projects/prepare/semver-policy/pom.xml
+++ b/maven-release-plugin/src/it/projects/prepare/semver-policy/pom.xml
@@ -22,7 +22,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.plugin.release.it</groupId>
   <artifactId>semver-policy</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>1.0.1-SNAPSHOT</version>
   <scm>
     <connection>scm:dummy|nul</connection>
     <developerConnection>scm:dummy|nul</developerConnection>
@@ -42,11 +42,6 @@
             <artifactId>maven-scm-provider-dummy</artifactId>
             <version>1.0</version>
           </dependency>
-          <dependency>
-            <groupId>org.apache.maven.release</groupId>
-            <artifactId>maven-release-semver-policy</artifactId>
-            <version>@project.version@</version>
-          </dependency>
         </dependencies>
       </plugin>
     </plugins>
diff --git 
a/maven-release-plugin/src/it/projects/prepare/semver-policy/verify.groovy 
b/maven-release-plugin/src/it/projects/prepare/semver-policy/verify.groovy
new file mode 100644
index 00000000..c30ee34f
--- /dev/null
+++ b/maven-release-plugin/src/it/projects/prepare/semver-policy/verify.groovy
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import groovy.xml.XmlSlurper
+
+// The pom based version is NOT related to what the actual version will be.
+File pomXml = new File(basedir, 'pom.xml')
+assert pomXml.exists()
+assert new XmlSlurper().parse(pomXml).version.text() == "1.0.1-SNAPSHOT"
+
+// The actual version is hard coded
+File pomXmlTag = new File(basedir, 'pom.xml.tag')
+assert pomXmlTag.exists()
+assert new XmlSlurper().parse(pomXmlTag).version.text() == "1.0.1"
+
+// The next development version is hard coded
+File pomXmlNext = new File(basedir, 'pom.xml.next')
+assert pomXmlNext.exists()
+assert new XmlSlurper().parse(pomXmlNext).version.text() == "1.1.0-SNAPSHOT"
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
index d5b5aa6f..0aa2ad60 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/BranchReleaseMojo.java
@@ -196,7 +196,7 @@ public class BranchReleaseMojo extends 
AbstractScmReadWriteReleaseMojo {
      * The role-hint for the {@link 
org.apache.maven.shared.release.policy.version.VersionPolicy}
      * implementation used to calculate the project versions.
      *
-     * @see org.apache.maven.shared.release.policies.DefaultVersionPolicy
+     * @see <a href="./versioning-policies.html">Versioning Policies</a>
      * @since 3.0.0-M5
      */
     @Parameter(defaultValue = "default", property = "projectVersionPolicyId")
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
index 2bc70869..22fd08ef 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java
@@ -244,7 +244,7 @@ public class PrepareReleaseMojo extends 
AbstractScmReadWriteReleaseMojo {
      * The role-hint for the {@link 
org.apache.maven.shared.release.policy.version.VersionPolicy}
      * implementation used to calculate the project versions.
      *
-     * @see org.apache.maven.shared.release.policies.DefaultVersionPolicy
+     * @see <a href="./versioning-policies.html">Versioning Policies</a>
      * @since 2.5.1
      */
     @Parameter(defaultValue = "default", property = "projectVersionPolicyId")
diff --git 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
index ad9d3b74..ed3be075 100644
--- 
a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
+++ 
b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/UpdateVersionsMojo.java
@@ -89,6 +89,7 @@ public class UpdateVersionsMojo extends AbstractReleaseMojo {
     /**
      * The role-hint for the VersionPolicy implementation used to calculate 
the project versions.
      *
+     *  @see <a href="./versioning-policies.html">Versioning Policies</a>
      * @since 3.0.0-M5
      */
     @Parameter(defaultValue = "default", property = "projectVersionPolicyId")
diff --git a/maven-release-plugin/src/site/markdown/versioning-policies.md 
b/maven-release-plugin/src/site/markdown/versioning-policies.md
new file mode 100644
index 00000000..22c26cd6
--- /dev/null
+++ b/maven-release-plugin/src/site/markdown/versioning-policies.md
@@ -0,0 +1,54 @@
+---
+title: Versioning Policies
+---
+
+<!-- Licensed to the Apache Software Foundation (ASF) under one-->
+<!-- or more contributor license agreements.  See the NOTICE file-->
+<!-- distributed with this work for additional information-->
+<!-- regarding copyright ownership.  The ASF licenses this file-->
+<!-- to you under the Apache License, Version 2.0 (the-->
+<!-- "License"); you may not use this file except in compliance-->
+<!-- with the License.  You may obtain a copy of the License at-->
+<!---->
+<!--   http://www.apache.org/licenses/LICENSE-2.0-->
+<!---->
+<!-- Unless required by applicable law or agreed to in writing,-->
+<!-- software distributed under the License is distributed on an-->
+<!-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY-->
+<!-- KIND, either express or implied.  See the License for the-->
+<!-- specific language governing permissions and limitations-->
+<!-- under the License.-->
+
+# Versioning Policies
+
+When performing a release, the Maven Release Plugin needs to determine the 
next release and development version.
+
+By default, it simply removes `-SNAPSHOT` for release version and increments 
the last digit of the version number for next development.
+
+However, you can customize this behavior by using different version policies,
+by settings the `projectVersionPolicyId` parameter to the desired version 
policy.
+
+Maven Release Plugin comes with built-in version policies:
+
+- `default` - increments the last digit of the version number for next 
development
+- `OddEvenVersionPolicy` - proposes even version numbers only for releases and 
odd numbers for development
+- `SemVerMajorDevelopment` - increases major element for next development 
version
+- `SemVerMinorDevelopment` - increases minor element for next development 
version
+- `SemVerPatchDevelopment` - increases patch element for next development 
version, similar to default policy
+- `SemVerMajorRelease` - increases major element for release version
+- `SemVerMinorRelease` - increases minor element for release version
+
+The `SemVer*` policies enforce [Semantic Versioning](https://semver.org/) 
rules.
+
+Examples of version policies:
+
+| projectVersionPolicyId | project version | next release version | next 
development version |
+|------------------------|-----------------|----------------------|--------------------------|
+| default                | 1.2.3-SNAPSHOT  | 1.2.3                | 
1.2.4-SNAPSHOT           |
+| OddEvenVersionPolicy   | 1.0.1-SNAPSHOT  | 1.0.2                | 
1.0.3-SNAPSHOT           |
+| SemVerMajorDevelopment | 1.2.3-SNAPSHOT  | 1.2.3                | 
2.0.0-SNAPSHOT           |
+| SemVerMinorDevelopment | 1.2.3-SNAPSHOT  | 1.2.3                | 
1.3.0-SNAPSHOT           |
+| SemVerPatchDevelopment | 1.2.3-SNAPSHOT  | 1.2.3                | 
1.2.4-SNAPSHOT           |
+| SemVerMajorRelease     | 1.2.3-SNAPSHOT  | 2.0.0                | 
2.0.1-SNAPSHOT           |
+| SemVerMinorRelease     | 1.2.3-SNAPSHOT  | 1.3.0                | 
1.3.1-SNAPSHOT           |
+
diff --git a/maven-release-plugin/src/site/site.xml 
b/maven-release-plugin/src/site/site.xml
index bfdce7c0..6c964f5f 100644
--- a/maven-release-plugin/src/site/site.xml
+++ b/maven-release-plugin/src/site/site.xml
@@ -52,6 +52,7 @@ under the License.
         <item name="Create a Branch" href="usage/branch.html" />
         <item name="Update POM Versions" href="usage/update-versions.html" />
       </item>
+      <item name="Versioning Policies" href="versioning-policies.html" />
       <item name="Migrate" href="migrate.html" />
       <item name="FAQ" href="faq.html" />
       <!-- According to https://issues.apache.org/jira/browse/MNGSITE-152 -->
diff --git a/maven-release-policies/maven-release-oddeven-policy/pom.xml 
b/maven-release-policies/maven-release-oddeven-policy/pom.xml
index c02ffa62..bd9ba91d 100644
--- a/maven-release-policies/maven-release-oddeven-policy/pom.xml
+++ b/maven-release-policies/maven-release-oddeven-policy/pom.xml
@@ -69,6 +69,11 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
diff --git 
a/maven-release-policies/maven-release-oddeven-policy/src/test/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicyTestCase.java
 
b/maven-release-policies/maven-release-oddeven-policy/src/test/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicyTestCase.java
index 5999a073..0d32721a 100644
--- 
a/maven-release-policies/maven-release-oddeven-policy/src/test/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicyTestCase.java
+++ 
b/maven-release-policies/maven-release-oddeven-policy/src/test/java/org/apache/maven/shared/release/policy/oddeven/OddEvenVersionPolicyTestCase.java
@@ -20,7 +20,8 @@ package org.apache.maven.shared.release.policy.oddeven;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -28,31 +29,37 @@ final class OddEvenVersionPolicyTestCase {
 
     private final VersionPolicy versionPolicy = new OddEvenVersionPolicy();
 
-    @Test
-    void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.0.1-SNAPSHOT",
+        "1.0.1, 1.0.3-SNAPSHOT",
+        "1.0.2, 1.0.3-SNAPSHOT",
+        "1.1.0, 1.1.1-SNAPSHOT",
+        "1.1.1, 1.1.3-SNAPSHOT"
+    })
+    void testConvertToSnapshot(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.1-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.0.0",
+        "1.0.1-SNAPSHOT, 1.0.2",
+        "1.0.2-SNAPSHOT, 1.0.2",
+        "1.0.3-SNAPSHOT, 1.0.4",
+        "1.1.0-SNAPSHOT, 1.1.0",
+        "1.1.1-SNAPSHOT, 1.1.2"
+    })
+    void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
-    }
-
-    @Test
-    void testConvertOddToRelease() throws Exception {
-        String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.1-SNAPSHOT"))
-                .getVersion();
-
-        assertEquals("1.0.2", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git a/maven-release-policies/maven-release-semver-policy/pom.xml 
b/maven-release-policies/maven-release-semver-policy/pom.xml
index 547491c8..f38eb937 100644
--- a/maven-release-policies/maven-release-semver-policy/pom.xml
+++ b/maven-release-policies/maven-release-semver-policy/pom.xml
@@ -30,7 +30,7 @@
   <artifactId>maven-release-semver-policy</artifactId>
 
   <name>Maven Release SemVer Policy</name>
-  <description>A version policy that enforce SemVer format and upgrades minor 
element for next development version.</description>
+  <description>Version policies that enforce SemVer format</description>
 
   <dependencies>
     <dependency>
@@ -44,10 +44,23 @@
       <artifactId>api</artifactId>
       <version>0.9.33</version>
       <exclusions>
+        <!-- only one class Version from semver api is used, avoid bringing in 
unnecessary dependencies -->
         <exclusion>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.ow2.asm</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>de.tototec</groupId>
+          <artifactId>de.tototec.cmdoption</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
 
@@ -56,17 +69,22 @@
       <artifactId>javax.inject</artifactId>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>org.eclipse.sisu</groupId>
-      <artifactId>org.eclipse.sisu.inject</artifactId>
-      <scope>provided</scope>
-    </dependency>
 
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-params</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 </project>
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/AbstarctSemVerVersionPolicy.java
similarity index 52%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/AbstarctSemVerVersionPolicy.java
index af6da78b..7608fb54 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/AbstarctSemVerVersionPolicy.java
@@ -20,33 +20,30 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
+import org.apache.maven.shared.release.versions.VersionParseException;
+import org.semver.Version;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-public final class SemVerVersionPolicyTest {
-
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
-
-    @Test
-    public void testConvertToSnapshot() throws Exception {
-        String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
-                .getVersion();
-
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+/**
+ * Abstract base class for SemVer-based VersionPolicy implementations.
+ *
+ * @since 3.3.0
+ */
+abstract class AbstarctSemVerVersionPolicy implements VersionPolicy {
+
+    protected Version createVersionFromRequest(VersionPolicyRequest request) 
throws VersionParseException {
+        try {
+            return Version.parse(request.getVersion());
+        } catch (IllegalArgumentException e) {
+            throw new VersionParseException(e.getMessage());
+        }
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
-        String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
-                .getVersion();
-
-        assertEquals("1.0.0", suggestedVersion);
+    protected VersionPolicyResult createResult(Version version) {
+        return new VersionPolicyResult().setVersion(version.toString());
     }
 
-    private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
-        return new VersionPolicyRequest().setVersion(version);
+    protected VersionPolicyResult createSnapshotResult(Version version) {
+        return new VersionPolicyResult().setVersion(version.toString() + 
"-SNAPSHOT");
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicy.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicy.java
index 3a47d3bf..6a93c550 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicy.java
@@ -21,48 +21,29 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
 import org.semver.Version;
-import org.semver.Version.Element;
 
 /**
- * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ * Uses SemVer implementation to increase major element when resolving the 
development version.
+ *
+ * @since 3.3.0
  */
 @Singleton
-@Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Named("SemVerMajorDevelopment")
+public class SemVerMajorDevelopmentVersionPolicy extends 
AbstarctSemVerVersionPolicy {
 
     @Override
     public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
+        Version version = createVersionFromRequest(request).toReleaseVersion();
+        return createResult(version);
     }
 
     @Override
     public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+        Version version = 
createVersionFromRequest(request).next(Version.Element.MAJOR);
+        return createSnapshotResult(version);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicy.java
similarity index 55%
copy from 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicy.java
index 3a47d3bf..db750693 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicy.java
@@ -21,48 +21,29 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
 import org.semver.Version;
-import org.semver.Version.Element;
 
 /**
- * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ * Uses SemVer implementation to increase major element when resolving the 
release version.
+ *
+ * @since 3.3.0
  */
 @Singleton
-@Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Named("SemVerMajorRelease")
+public class SemVerMajorReleaseVersionPolicy extends 
AbstarctSemVerVersionPolicy {
 
     @Override
     public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
+        Version version = 
createVersionFromRequest(request).toReleaseVersion().next(Version.Element.MAJOR);
+        return createResult(version);
     }
 
     @Override
     public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+        Version version = 
createVersionFromRequest(request).next(Version.Element.PATCH);
+        return createSnapshotResult(version);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicy.java
similarity index 59%
copy from 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicy.java
index 3a47d3bf..00437109 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicy.java
@@ -21,48 +21,29 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
 import org.semver.Version;
-import org.semver.Version.Element;
 
 /**
  * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ *
+ * @since 3.3.0
  */
 @Singleton
-@Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Named("SemVerMinorDevelopment")
+public class SemVerMinorDevelopmentVersionPolicy extends 
AbstarctSemVerVersionPolicy {
 
     @Override
     public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
+        Version version = createVersionFromRequest(request).toReleaseVersion();
+        return createResult(version);
     }
 
     @Override
     public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+        Version version = 
createVersionFromRequest(request).next(Version.Element.MINOR);
+        return createSnapshotResult(version);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicy.java
similarity index 58%
copy from 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicy.java
index 3a47d3bf..f9debea5 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicy.java
@@ -21,48 +21,29 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
 import org.semver.Version;
-import org.semver.Version.Element;
 
 /**
- * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ * Uses SemVer implementation to increase minor element when resolving the 
release version.
+ *
+ * @since 3.3.0
  */
 @Singleton
-@Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Named("SemVerMinorRelease")
+public class SemVerMinorReleaseVersionPolicy extends 
AbstarctSemVerVersionPolicy {
 
     @Override
     public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
+        Version version = 
createVersionFromRequest(request).toReleaseVersion().next(Version.Element.MINOR);
+        return createResult(version);
     }
 
     @Override
     public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+        Version version = 
createVersionFromRequest(request).next(Version.Element.PATCH);
+        return createSnapshotResult(version);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicy.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
copy to 
maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicy.java
index 3a47d3bf..a0ca4d82 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicy.java
@@ -21,48 +21,29 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
 import org.semver.Version;
-import org.semver.Version.Element;
 
 /**
- * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ * Uses SemVer implementation to increase patch element when resolving the 
development version.
+ *
+ * @since 3.3.0
  */
 @Singleton
-@Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Named("SemVerPatchDevelopment")
+public class SemVerPatchDevelopmentVersionPolicy extends 
AbstarctSemVerVersionPolicy {
 
     @Override
     public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
+        Version version = createVersionFromRequest(request).toReleaseVersion();
+        return createResult(version);
     }
 
     @Override
     public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+        Version version = 
createVersionFromRequest(request).next(Version.Element.PATCH);
+        return createSnapshotResult(version);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
index 3a47d3bf..50bfc88f 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicy.java
@@ -21,48 +21,28 @@ package org.apache.maven.shared.release.policy.semver;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
 import org.apache.maven.shared.release.policy.version.VersionPolicyResult;
 import org.apache.maven.shared.release.versions.VersionParseException;
-import org.eclipse.sisu.Description;
-import org.semver.Version;
-import org.semver.Version.Element;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Uses SemVer implementation to increase minor element when resolving the 
development version.
+ *
+ * @deprecated use {@link SemVerMinorDevelopmentVersionPolicy} instead.
  */
 @Singleton
 @Named("SemVerVersionPolicy")
-@Description("A VersionPolicy following the SemVer rules")
-public class SemVerVersionPolicy implements VersionPolicy {
+@Deprecated
+public class SemVerVersionPolicy extends SemVerMinorDevelopmentVersionPolicy {
 
-    @Override
-    public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version.toReleaseVersion().toString());
-        return result;
-    }
+    private final Logger logger = 
LoggerFactory.getLogger(SemVerVersionPolicy.class);
 
     @Override
-    public VersionPolicyResult getDevelopmentVersion(VersionPolicyRequest 
request) throws VersionParseException {
-        Version version;
-        try {
-            version = Version.parse(request.getVersion());
-        } catch (IllegalArgumentException e) {
-            throw new VersionParseException(e.getMessage());
-        }
-
-        version = version.next(Element.MINOR);
-        VersionPolicyResult result = new VersionPolicyResult();
-        result.setVersion(version + "-SNAPSHOT");
-        return result;
+    public VersionPolicyResult getReleaseVersion(VersionPolicyRequest request) 
throws VersionParseException {
+        logger.warn("SemVerVersionPolicy is deprecated and will be removed in 
future releases. "
+                + "Please use SemVerMinorDevelopment instead.");
+        return super.getReleaseVersion(request);
     }
 }
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicyTest.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicyTest.java
index af6da78b..17c3bc00 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorDevelopmentVersionPolicyTest.java
@@ -20,30 +20,42 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public final class SemVerVersionPolicyTest {
+class SemVerMajorDevelopmentVersionPolicyTest {
+    private final VersionPolicy versionPolicy = new 
SemVerMajorDevelopmentVersionPolicy();
 
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
-
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 2.0.0-SNAPSHOT",
+        "1.2.3, 2.0.0-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.0.0",
+        "1.2.3-SNAPSHOT, 1.2.3",
+        "1.0.0-alpha-SNAPSHOT, 1.0.0",
+        "1.0.0+build.1-SNAPSHOT, 1.0.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicyTest.java
similarity index 56%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicyTest.java
index af6da78b..1908962c 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMajorReleaseVersionPolicyTest.java
@@ -20,30 +20,43 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public final class SemVerVersionPolicyTest {
+class SemVerMajorReleaseVersionPolicyTest {
+    private final VersionPolicy versionPolicy = new 
SemVerMajorReleaseVersionPolicy();
 
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
-
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.0.1-SNAPSHOT",
+        "2.0.0, 2.0.1-SNAPSHOT",
+        "1.2.3, 1.2.4-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 2.0.0",
+        "1.2.3-SNAPSHOT, 2.0.0",
+        "1.0.0-alpha-SNAPSHOT, 2.0.0",
+        "1.0.0+build.1-SNAPSHOT, 2.0.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicyTest.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicyTest.java
index af6da78b..c79131ab 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorDevelopmentVersionPolicyTest.java
@@ -20,30 +20,42 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public final class SemVerVersionPolicyTest {
+class SemVerMinorDevelopmentVersionPolicyTest {
+    private final VersionPolicy versionPolicy = new 
SemVerMinorDevelopmentVersionPolicy();
 
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
-
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.1.0-SNAPSHOT",
+        "1.2.3, 1.3.0-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.0.0",
+        "1.2.3-SNAPSHOT, 1.2.3",
+        "1.0.0-alpha-SNAPSHOT, 1.0.0",
+        "1.0.0+build.1-SNAPSHOT, 1.0.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicyTest.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicyTest.java
index af6da78b..1aa65d4b 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerMinorReleaseVersionPolicyTest.java
@@ -20,30 +20,43 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public final class SemVerVersionPolicyTest {
+class SemVerMinorReleaseVersionPolicyTest {
 
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
+    private final VersionPolicy versionPolicy = new 
SemVerMinorReleaseVersionPolicy();
 
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.0.1-SNAPSHOT",
+        "1.2.3, 1.2.4-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.1.0",
+        "1.2.3-SNAPSHOT, 1.3.0",
+        "1.0.0-alpha-SNAPSHOT, 1.1.0",
+        "1.0.0+build.1-SNAPSHOT, 1.1.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicyTest.java
similarity index 57%
copy from 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
copy to 
maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicyTest.java
index af6da78b..ee812c1f 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerPatchDevelopmentVersionPolicyTest.java
@@ -20,30 +20,43 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public final class SemVerVersionPolicyTest {
+class SemVerPatchDevelopmentVersionPolicyTest {
 
-    private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
+    private final VersionPolicy versionPolicy = new 
SemVerPatchDevelopmentVersionPolicy();
 
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.0.1-SNAPSHOT",
+        "1.2.3, 1.2.4-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.0.0",
+        "1.2.3-SNAPSHOT, 1.2.3",
+        "1.0.0-alpha-SNAPSHOT, 1.0.0",
+        "1.0.0+build.1-SNAPSHOT, 1.0.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
index af6da78b..3645c250 100644
--- 
a/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
+++ 
b/maven-release-policies/maven-release-semver-policy/src/test/java/org/apache/maven/shared/release/policy/semver/SemVerVersionPolicyTest.java
@@ -20,7 +20,8 @@ package org.apache.maven.shared.release.policy.semver;
 
 import org.apache.maven.shared.release.policy.version.VersionPolicy;
 import org.apache.maven.shared.release.policy.version.VersionPolicyRequest;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -28,22 +29,34 @@ public final class SemVerVersionPolicyTest {
 
     private final VersionPolicy versionPolicy = new SemVerVersionPolicy();
 
-    @Test
-    public void testConvertToSnapshot() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0, 1.1.0-SNAPSHOT",
+        "1.2.3, 1.3.0-SNAPSHOT",
+        "1.0.0-alpha, 1.0.0-SNAPSHOT",
+        "1.0.0+build.1, 1.0.0-SNAPSHOT"
+    })
+    public void testConvertToSnapshot(String requested, String expected) 
throws Exception {
         String suggestedVersion = versionPolicy
-                .getDevelopmentVersion(newVersionPolicyRequest("1.0.0"))
+                .getDevelopmentVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.1.0-SNAPSHOT", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
-    @Test
-    public void testConvertToRelease() throws Exception {
+    @ParameterizedTest
+    @CsvSource({
+        "1.0.0-SNAPSHOT, 1.0.0",
+        "1.2.3-SNAPSHOT, 1.2.3",
+        "1.0.0-alpha-SNAPSHOT, 1.0.0",
+        "1.0.0+build.1-SNAPSHOT, 1.0.0"
+    })
+    public void testConvertToRelease(String requested, String expected) throws 
Exception {
         String suggestedVersion = versionPolicy
-                .getReleaseVersion(newVersionPolicyRequest("1.0.0-SNAPSHOT"))
+                .getReleaseVersion(newVersionPolicyRequest(requested))
                 .getVersion();
 
-        assertEquals("1.0.0", suggestedVersion);
+        assertEquals(expected, suggestedVersion);
     }
 
     private static VersionPolicyRequest newVersionPolicyRequest(String 
version) {
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
index 7e599dcc..154356e8 100644
--- a/src/site/markdown/index.md
+++ b/src/site/markdown/index.md
@@ -27,10 +27,10 @@ Maven Release provides tooling to release a project with 
Maven, saving a lot of
 
 It consists of the following modules:
 
-|Module|Description|
-|:---|:---|
-|[maven-release-api](./maven-release-api/)|APIs to implement to extend 
maven-release-plugin|
-|[maven-release-manager](./maven-release-manager/)|core classes|
-|[maven-release-plugin](./maven-release-plugin/)|release plugin to use from 
Maven|
-|[maven-release-oddeven-policy](./maven-release-policies/maven-release-oddeven-policy/)|a
 version policy that proposes even version numbers only for releases and odd 
numbers for development|
-|[maven-release-semver-policy](./maven-release-policies/maven-release-semver-policy/)|a
 version policy that enforces SemVer format and upgrades the minor element for 
the next development version|
+| Module                                                                       
          | Description                                                         
                                  |
+|:---------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------|
+| [maven-release-api](./maven-release-api/)                                    
          | APIs to implement to extend maven-release-plugin                    
                                  |
+| [maven-release-manager](./maven-release-manager/)                            
          | core classes                                                        
                                  |
+| [maven-release-plugin](./maven-release-plugin/)                              
          | release plugin to use from Maven                                    
                                  |
+| 
[maven-release-oddeven-policy](./maven-release-policies/maven-release-oddeven-policy/)
 | a version policy that proposes even version numbers only for releases and 
odd numbers for development |
+| 
[maven-release-semver-policy](./maven-release-policies/maven-release-semver-policy/)
   | version policies that enforces [Semantic Versioning](https://semver.org/) 
format                      |

Reply via email to