Repository: mojohaus/versions
Pull request #1204 (2024-12-25 20:31:14)

Versions refactor 2
This is a second stage of the other PR, adding UpdateParent to the common base: I've noticed that updating parent is already being done by Use-\*-\*, but it used a different method. So why don't we refactor it even further? The goal is to make the plugin codebase smaller.

Also, here I have replaced `is...` getters by `get...` for booleans as they were not always grammatical and not always consistent (`isProcessing...` which differs from the name of the field).

Edit: added a comment: with skipResultion == false, this goal is a slightly modified use-\*-\* targeting parent only, with an added modification that it also has the `parentVersion` parameter.

Maybe I should just merge this PR into the other one and create one big PR instead?

slawekjaranowski: can be done step by step.
Please merge depends PR and resolve conflicts.
andrzejj0: Rebased.

One remark: because the goal now shares the common base with other similar goals, which don't print such information, we are now also not logging INFO lines like:

`[INFO] The parent project is the latest version`

so I had to remove a check for that line from one of the it tests.

Patch:
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsDependencyUpdaterMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsDependencyUpdaterMojo.java
index 8428c9f2..b7437870 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsDependencyUpdaterMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsDependencyUpdaterMojo.java
@@ -113,30 +113,6 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
     @Parameter(property = "scope")
     private String scope = null;
 
-    /**
-     * Whether to process the dependencies section of the project.
-     *
-     * @since 1.0-alpha-3
-     */
-    @Parameter(property = "processDependencies", defaultValue = "true")
-    private boolean processDependencies = true;
-
-    /**
-     * Whether to process the dependencyManagement section of the project.
-     *
-     * @since 1.0-alpha-3
-     */
-    @Parameter(property = "processDependencyManagement", defaultValue = "true")
-    private boolean processDependencyManagement = true;
-
-    /**
-     * Whether to process the parent section of the project. If not set will default to false.
-     *
-     * @since 2.3
-     */
-    @Parameter(property = "processParent", defaultValue = "false")
-    private boolean processParent = false;
-
     /**
      * Artifact filter to determine if artifact should be included
      *
@@ -174,9 +150,7 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
      * @return returns <code>true</code> if the project/dependencies section of the pom should be processed.
      * @since 1.0-alpha-3
      */
-    public boolean isProcessingDependencies() {
-        return processDependencies;
-    }
+    protected abstract boolean getProcessDependencies();
 
     /**
      * Should the project/dependencyManagement section of the pom be processed.
@@ -184,9 +158,7 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
      * @return returns <code>true</code> if the project/dependencyManagement section of the pom should be processed.
      * @since 1.0-alpha-3
      */
-    public boolean isProcessingDependencyManagement() {
-        return processDependencyManagement;
-    }
+    protected abstract boolean getProcessDependencyManagement();
 
     /**
      * Should the project/parent section of the pom be processed.
@@ -194,9 +166,7 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
      * @return returns <code>true</code> if the project/parent section of the pom should be processed.
      * @since 2.3
      */
-    public boolean isProcessingParent() {
-        return processParent;
-    }
+    public abstract boolean getProcessParent();
 
     /**
      * Should the artifacts produced in the current reactor be excluded from processing.
@@ -205,7 +175,7 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
      * should be excluded from processing.
      * @since 1.0-alpha-3
      */
-    public boolean isExcludeReactor() {
+    public boolean getExcludeReactor() {
         return excludeReactor;
     }
 
@@ -503,7 +473,7 @@ public abstract class AbstractVersionsDependencyUpdaterMojo extends AbstractVers
             MutableXMLStreamReader pom, Dependency dep, String newVersion, DependencyChangeRecord.ChangeKind changeKind)
             throws XMLStreamException, MojoExecutionException {
         boolean updated = false;
-        if (isProcessingParent()
+        if (getProcessParent()
                 && getProject().getParent() != null
                 && (DependencyComparator.INSTANCE.compare(
                                         dep,
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsUpdaterMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsUpdaterMojo.java
index 43e92914..ed751439 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsUpdaterMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/AbstractVersionsUpdaterMojo.java
@@ -123,8 +123,6 @@ public abstract class AbstractVersionsUpdaterMojo extends AbstractMojo {
     @Parameter(property = "generateBackupPoms", defaultValue = "true")
     protected boolean generateBackupPoms;
 
-    protected abstract boolean isAllowSnapshots();
-
     /**
      * Our versions helper.
      */
@@ -209,6 +207,8 @@ public abstract class AbstractVersionsUpdaterMojo extends AbstractMojo {
         this.changeRecorders = changeRecorders;
     }
 
+    protected abstract boolean getAllowSnapshots();
+
     public VersionsHelper getHelper() throws MojoExecutionException {
         if (helper == null) {
             helper = new DefaultVersionsHelper.Builder()
@@ -290,7 +290,7 @@ public abstract class AbstractVersionsUpdaterMojo extends AbstractMojo {
     protected ArtifactVersion findLatestVersion(
             Artifact artifact, VersionRange versionRange, Boolean allowingSnapshots, boolean usePluginRepositories)
             throws MojoExecutionException, VersionRetrievalException {
-        boolean includeSnapshots = allowingSnapshots != null ? allowingSnapshots : isAllowSnapshots();
+        boolean includeSnapshots = allowingSnapshots != null ? allowingSnapshots : getAllowSnapshots();
         final ArtifactVersions artifactVersions =
                 getHelper().lookupArtifactVersions(artifact, versionRange, usePluginRepositories);
         return artifactVersions.getNewestVersion(versionRange, null, includeSnapshots, false);
@@ -431,7 +431,7 @@ public abstract class AbstractVersionsUpdaterMojo extends AbstractMojo {
         ArtifactVersion winner = version.getNewestVersion(
                 currentVersion,
                 property,
-                isAllowSnapshots(),
+                getAllowSnapshots(),
                 this.reactorProjects,
                 this.getHelper(),
                 allowDowngrade,
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
index a2ab3245..1c13a0bb 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/CompareDependenciesMojo.java
@@ -116,11 +116,29 @@ public class CompareDependenciesMojo extends AbstractVersionsDependencyUpdaterMo
     @Parameter(property = "reportOutputFile")
     protected File reportOutputFile;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        // this parameter is used by base class, but shouldn't affect comparison; setting to true
-        return true;
-    }
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
 
     /**
      * The (injected) instance of {@link ProjectBuilder}
@@ -142,6 +160,27 @@ public class CompareDependenciesMojo extends AbstractVersionsDependencyUpdaterMo
         this.projectBuilder = projectBuilder;
     }
 
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowSnapshots() {
+        // this parameter is used by base class, but shouldn't affect comparison; setting to true
+        return true;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws org.apache.maven.plugin.MojoExecutionException Something wrong with the plugin itself
@@ -187,14 +226,14 @@ public class CompareDependenciesMojo extends AbstractVersionsDependencyUpdaterMo
 
         List<String> totalDiffs = new ArrayList<>();
         List<String> propertyDiffs = new ArrayList<>();
-        if (getProject().getDependencyManagement() != null && isProcessingDependencyManagement()) {
+        if (getProject().getDependencyManagement() != null && getProcessDependencyManagement()) {
             totalDiffs.addAll(compareVersions(
                     pom,
                     getProject().getDependencyManagement().getDependencies(),
                     remoteDepsMap,
                     DependencyChangeRecord.ChangeKind.DEPENDENCY_MANAGEMENT));
         }
-        if (getProject().getDependencies() != null && isProcessingDependencies()) {
+        if (getProject().getDependencies() != null && getProcessDependencies()) {
             totalDiffs.addAll(compareVersions(
                     pom, getProject().getDependencies(), remoteDepsMap, DependencyChangeRecord.ChangeKind.DEPENDENCY));
         }
@@ -205,7 +244,7 @@ public class CompareDependenciesMojo extends AbstractVersionsDependencyUpdaterMo
                             .build());
             propertyDiffs.addAll(updatePropertyVersions(pom, versionProperties, remoteDepsMap));
         }
-        if (getProject().getParent() != null && remoteMavenProject.getParent() != null && isProcessingParent()) {
+        if (getProject().getParent() != null && remoteMavenProject.getParent() != null && getProcessParent()) {
             Dependency parent = DependencyBuilder.newBuilder()
                     .withGroupId(remoteMavenProject.getParentArtifact().getGroupId())
                     .withArtifactId(remoteMavenProject.getParentArtifact().getArtifactId())
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java
index 643c716d..9cae6bf8 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayDependencyUpdatesMojo.java
@@ -318,11 +318,6 @@ public class DisplayDependencyUpdatesMojo extends AbstractVersionsDisplayMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     // --------------------- GETTER / SETTER METHODS ---------------------
 
     @Inject
@@ -334,6 +329,11 @@ public class DisplayDependencyUpdatesMojo extends AbstractVersionsDisplayMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     // open for tests
     protected static boolean dependenciesMatch(Dependency dependency, Dependency managedDependency) {
         if (!managedDependency.getGroupId().equals(dependency.getGroupId())) {
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayExtensionUpdatesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayExtensionUpdatesMojo.java
index c79bfbd9..eed47bf9 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayExtensionUpdatesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayExtensionUpdatesMojo.java
@@ -153,11 +153,6 @@ public class DisplayExtensionUpdatesMojo extends AbstractVersionsDisplayMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     @Inject
     public DisplayExtensionUpdatesMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -167,6 +162,11 @@ public class DisplayExtensionUpdatesMojo extends AbstractVersionsDisplayMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         logInit();
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayParentUpdatesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayParentUpdatesMojo.java
index 51267cff..452c540b 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayParentUpdatesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayParentUpdatesMojo.java
@@ -139,11 +139,6 @@ public class DisplayParentUpdatesMojo extends AbstractVersionsDisplayMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     // -------------------------- OTHER METHODS --------------------------
 
     @Inject
@@ -155,6 +150,11 @@ public class DisplayParentUpdatesMojo extends AbstractVersionsDisplayMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         logInit();
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
index 12034930..06a267ad 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPluginUpdatesMojo.java
@@ -179,11 +179,6 @@ public class DisplayPluginUpdatesMojo extends AbstractVersionsDisplayMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     // --------------------- GETTER / SETTER METHODS ---------------------
 
     @Inject
@@ -204,6 +199,11 @@ public class DisplayPluginUpdatesMojo extends AbstractVersionsDisplayMojo {
         this.runtimeInformation = runtimeInformation;
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     /**
      * Returns the pluginManagement section of the super-pom.
      *
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
index 545db1d2..72e5fa8c 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/DisplayPropertyUpdatesMojo.java
@@ -147,11 +147,6 @@ public class DisplayPropertyUpdatesMojo extends AbstractVersionsDisplayMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     // -------------------------- STATIC METHODS --------------------------
 
     // -------------------------- OTHER METHODS --------------------------
@@ -165,6 +160,11 @@ public class DisplayPropertyUpdatesMojo extends AbstractVersionsDisplayMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     public void execute() throws MojoExecutionException, MojoFailureException {
         logInit();
         List<String> current = new ArrayList<>();
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ForceReleasesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ForceReleasesMojo.java
index 5b3625c0..153d9e59 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ForceReleasesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ForceReleasesMojo.java
@@ -60,10 +60,29 @@ public class ForceReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
     @Parameter(property = "failIfNotReplaced", defaultValue = "false")
     protected boolean failIfNotReplaced;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return false;
-    }
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
 
     // ------------------------------ METHODS --------------------------
 
@@ -76,6 +95,26 @@ public class ForceReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowSnapshots() {
+        return false;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws org.apache.maven.plugin.MojoExecutionException when things go wrong
@@ -86,7 +125,7 @@ public class ForceReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
         try {
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
@@ -96,10 +135,10 @@ public class ForceReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
                             DependencyChangeRecord.ChangeKind.DEPENDENCY_MANAGEMENT);
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 useReleases(pom, getProject().getDependencies(), DependencyChangeRecord.ChangeKind.DEPENDENCY);
             }
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 useReleases(pom, singletonList(getParentDependency()), DependencyChangeRecord.ChangeKind.PARENT);
             }
         } catch (IOException e) {
@@ -113,7 +152,7 @@ public class ForceReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
             DependencyChangeRecord.ChangeKind changeKind)
             throws XMLStreamException, MojoExecutionException, VersionRetrievalException {
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring reactor dependency: " + toString(dep));
                 continue;
             }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/LockSnapshotsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/LockSnapshotsMojo.java
index 6b03e72c..fc7e73d6 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/LockSnapshotsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/LockSnapshotsMojo.java
@@ -37,6 +37,7 @@ import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.wagon.Wagon;
 import org.codehaus.mojo.versions.api.PomHelper;
@@ -67,13 +68,31 @@ public class LockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
      */
     private static final Pattern TIMESTAMPED_SNAPSHOT_REGEX = Pattern.compile("-" + Artifact.SNAPSHOT_VERSION);
 
-    // ------------------------------ METHODS --------------------------
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        // used by base method; must be true so that it's able to select snapshots
-        return true;
-    }
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
+    // ------------------------------ METHODS --------------------------
 
     @Inject
     public LockSnapshotsMojo(
@@ -84,6 +103,27 @@ public class LockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        // used by base method; must be true so that it's able to select snapshots
+        return true;
+    }
+
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
@@ -94,17 +134,17 @@ public class LockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException {
         try {
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
                     lockSnapshots(pom, dependencyManagement.getDependencies());
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 lockSnapshots(pom, getProject().getDependencies());
             }
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 lockParentSnapshot(pom, getProject().getParent());
             }
         } catch (IOException | VersionResolutionException e) {
@@ -115,7 +155,7 @@ public class LockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void lockSnapshots(MutableXMLStreamReader pom, Collection<Dependency> dependencies)
             throws XMLStreamException, MojoExecutionException, VersionResolutionException {
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring reactor dependency: " + toString(dep));
                 continue;
             }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
index a92d0b43..095045fd 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/ResolveRangesMojo.java
@@ -129,10 +129,29 @@ public class ResolveRangesMojo extends AbstractVersionsDependencyUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
 
     // ------------------------------ FIELDS ------------------------------
 
@@ -152,6 +171,26 @@ public class ResolveRangesMojo extends AbstractVersionsDependencyUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
@@ -163,17 +202,15 @@ public class ResolveRangesMojo extends AbstractVersionsDependencyUpdaterMojo {
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
         // Note we have to getModel the dependencies from the model because the dependencies in the
         // project may have already had their range resolved [MNG-4138]
-        if (hasDependencyManagement()
-                && hasDependenciesInDependencyManagement()
-                && isProcessingDependencyManagement()) {
+        if (hasDependencyManagement() && hasDependenciesInDependencyManagement() && getProcessDependencyManagement()) {
             getLog().debug("processing dependencyManagement of " + getProject().getId());
             resolveRanges(pom, getProject().getModel().getDependencyManagement().getDependencies());
         }
-        if (getProject().getDependencies() != null && isProcessingDependencies()) {
+        if (getProject().getDependencies() != null && getProcessDependencies()) {
             getLog().debug("processing dependencies of " + getProject().getId());
             resolveRanges(pom, getProject().getModel().getDependencies());
         }
-        if (hasParent() && isProcessingParent()) {
+        if (hasParent() && getProcessParent()) {
             getLog().debug("processing parent " + getProject().getId());
             resolveRangesInParent(pom);
         }
@@ -234,7 +271,7 @@ public class ResolveRangesMojo extends AbstractVersionsDependencyUpdaterMojo {
             throws XMLStreamException, MojoExecutionException, VersionRetrievalException {
 
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 continue;
             }
 
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java
index 668fee2e..a07bd7c8 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetMojo.java
@@ -247,11 +247,6 @@ public class SetMojo extends AbstractVersionsUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     /**
      * The changes to module coordinates. Guarded by this.
      */
@@ -277,6 +272,11 @@ public class SetMojo extends AbstractVersionsUpdaterMojo {
         this.prompter = prompter;
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     private synchronized void addChange(String groupId, String artifactId, String oldVersion, String newVersion) {
         if (!newVersion.equals(oldVersion)) {
             sourceChanges.add(new DefaultDependencyVersionChange(groupId, artifactId, oldVersion, newVersion));
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
index 54279500..732965ef 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetPropertyMojo.java
@@ -102,11 +102,6 @@ public class SetPropertyMojo extends AbstractVersionsUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     @Inject
     public SetPropertyMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -116,6 +111,11 @@ public class SetPropertyMojo extends AbstractVersionsUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetScmTagMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetScmTagMojo.java
index 1b72bbe3..87f76737 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetScmTagMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/SetScmTagMojo.java
@@ -72,11 +72,6 @@ public class SetScmTagMojo extends AbstractVersionsUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     @Inject
     public SetScmTagMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -86,6 +81,11 @@ public class SetScmTagMojo extends AbstractVersionsUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     /**
      * Called when this mojo is executed.
      *
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UnlockSnapshotsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UnlockSnapshotsMojo.java
index 404dfe73..bd06f7e0 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UnlockSnapshotsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UnlockSnapshotsMojo.java
@@ -31,6 +31,7 @@ import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.wagon.Wagon;
 import org.codehaus.mojo.versions.api.PomHelper;
@@ -59,13 +60,31 @@ public class UnlockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
      */
     private static final Pattern TIMESTAMPED_SNAPSHOT_REGEX = Pattern.compile("-(\\d{8}\\.\\d{6})-(\\d+)$");
 
-    // ------------------------------ METHODS --------------------------
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        // used by base class; must be true so that it can select snapshots
-        return true;
-    }
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
+    // ------------------------------ METHODS --------------------------
 
     @Inject
     public UnlockSnapshotsMojo(
@@ -76,6 +95,27 @@ public class UnlockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        // used by base class; must be true so that it can select snapshots
+        return true;
+    }
+
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
@@ -86,7 +126,7 @@ public class UnlockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException {
         try {
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
@@ -96,10 +136,10 @@ public class UnlockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
                             DependencyChangeRecord.ChangeKind.DEPENDENCY_MANAGEMENT);
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 unlockSnapshots(pom, getProject().getDependencies(), DependencyChangeRecord.ChangeKind.DEPENDENCY);
             }
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 unlockParentSnapshot(pom, getProject().getParent());
             }
         } catch (IOException e) {
@@ -111,7 +151,7 @@ public class UnlockSnapshotsMojo extends AbstractVersionsDependencyUpdaterMojo {
             MutableXMLStreamReader pom, List<Dependency> dependencies, DependencyChangeRecord.ChangeKind changeKind)
             throws XMLStreamException, MojoExecutionException {
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring reactor dependency: " + toString(dep));
                 continue;
             }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateChildModulesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateChildModulesMojo.java
index 3c3da89b..dca26032 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateChildModulesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateChildModulesMojo.java
@@ -74,11 +74,6 @@ public class UpdateChildModulesMojo extends AbstractVersionsUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
-
     @Inject
     public UpdateChildModulesMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -88,6 +83,11 @@ public class UpdateChildModulesMojo extends AbstractVersionsUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     /**
      * Called when this mojo is executed.
      *
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateParentMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateParentMojo.java
index 87ba243f..3514486e 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateParentMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdateParentMojo.java
@@ -18,17 +18,18 @@ package org.codehaus.mojo.versions;
 import javax.inject.Inject;
 import javax.xml.stream.XMLStreamException;
 
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.Comparator;
 import java.util.Map;
 import java.util.Optional;
-import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Mojo;
@@ -36,19 +37,15 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.wagon.Wagon;
 import org.codehaus.mojo.versions.api.ArtifactVersions;
 import org.codehaus.mojo.versions.api.PomHelper;
-import org.codehaus.mojo.versions.api.Segment;
 import org.codehaus.mojo.versions.api.VersionRetrievalException;
+import org.codehaus.mojo.versions.api.VersionsHelper;
 import org.codehaus.mojo.versions.api.recording.ChangeRecorder;
 import org.codehaus.mojo.versions.api.recording.DependencyChangeRecord;
-import org.codehaus.mojo.versions.ordering.InvalidSegmentException;
 import org.codehaus.mojo.versions.recording.DefaultDependencyChangeRecord;
 import org.codehaus.mojo.versions.rewriting.MutableXMLStreamReader;
-import org.codehaus.mojo.versions.utils.DefaultArtifactVersionCache;
 import org.codehaus.mojo.versions.utils.DependencyBuilder;
-import org.codehaus.mojo.versions.utils.SegmentUtils;
 import org.eclipse.aether.RepositorySystem;
 
-import static java.util.stream.StreamSupport.stream;
 import static org.apache.commons.lang3.StringUtils.isBlank;
 
 /**
@@ -58,7 +55,7 @@ import static org.apache.commons.lang3.StringUtils.isBlank;
  * @since 1.0-alpha-1
  */
 @Mojo(name = "update-parent", threadSafe = true)
-public class UpdateParentMojo extends AbstractVersionsUpdaterMojo {
+public class UpdateParentMojo extends UseLatestVersionsMojoBase {
 
     // ------------------------------ FIELDS ------------------------------
 
@@ -138,10 +135,9 @@ public class UpdateParentMojo extends AbstractVersionsUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
+    private VersionRange targetVersionRange;
+
+    private VersionsHelper helper;
 
     // -------------------------- OTHER METHODS --------------------------
 
@@ -154,14 +150,76 @@ public class UpdateParentMojo extends AbstractVersionsUpdaterMojo {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
-    /**
-     * @param pom the pom to update.
-     * @throws MojoExecutionException when things go wrong
-     * @throws MojoFailureException   when things go wrong in a very bad way
-     * @throws XMLStreamException     when things go wrong with XML streaming
-     * @see AbstractVersionsUpdaterMojo#update(MutableXMLStreamReader)
-     * @since 1.0-alpha-1
-     */
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
+        return allowMajorUpdates;
+    }
+
+    @Override
+    protected boolean getAllowMinorUpdates() {
+        return allowMinorUpdates;
+    }
+
+    @Override
+    protected boolean getAllowIncrementalUpdates() {
+        return allowIncrementalUpdates;
+    }
+
+    @Override
+    protected boolean getAllowDowngrade() {
+        return allowDowngrade;
+    }
+
+    @Override
+    protected boolean updateFilter(Dependency dep) {
+        return true;
+    }
+
+    @Override
+    protected boolean artifactVersionsFilter(ArtifactVersion ver) {
+        return targetVersionRange == null || ArtifactVersions.isVersionInRange(ver, targetVersionRange);
+    }
+
+    @Override
+    protected Optional<ArtifactVersion> versionProducer(Stream<ArtifactVersion> stream) {
+        Artifact artifact = helper.createDependencyArtifact(DependencyBuilder.newBuilder()
+                .withGroupId(getProject().getParent().getGroupId())
+                .withArtifactId(getProject().getParent().getArtifactId())
+                .withVersion(getProject().getParent().getVersion())
+                .withType("pom")
+                .build());
+        return stream.max(Comparator.naturalOrder()).map(candidate -> {
+            // check if the new artifact can be resolved (or force it with forceUpdate)
+            if (shouldApplyUpdate(artifact, getProject().getParent().getVersion(), candidate, forceUpdate)) {
+                return candidate;
+            } else {
+                getLog().debug("Update not applied. Exiting.");
+                return null;
+            }
+        });
+    }
+
+    @Override
+    protected boolean getProcessDependencies() {
+        return false;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return false;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return true;
+    }
+
+    @Override
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
         if (getProject().getParent() == null) {
@@ -174,94 +232,58 @@ public class UpdateParentMojo extends AbstractVersionsUpdaterMojo {
             return;
         }
 
-        if (skipResolution && isBlank(parentVersion)) {
-            throw new MojoExecutionException("skipResolution is only valid if parentVersion is set");
-        }
+        // with !skipResolution, this plugin is basically a slightly modified use-*-* targeting parent only
+        if (!skipResolution) {
+            this.helper = getHelper();
+            try {
+                targetVersionRange = getTargetVersionRange().orElse(null);
+            } catch (InvalidVersionSpecificationException e) {
+                throw new MojoExecutionException("Invalid version range specification: " + parentVersion, e);
+            }
+            super.update(pom);
+        } else {
+            if (isBlank(parentVersion)) {
+                throw new MojoExecutionException("skipResolution is only valid if parentVersion is set");
+            }
+            getLog().info("Updating parent from " + getProject().getParent().getVersion() + " to " + parentVersion);
 
-        try {
-            ArtifactVersion artifactVersion =
-                    skipResolution ? DefaultArtifactVersionCache.of(parentVersion) : resolveTargetVersion();
-            if (artifactVersion != null) {
-                getLog().info("Updating parent from " + getProject().getParent().getVersion() + " to "
-                        + artifactVersion);
-
-                if (PomHelper.setProjectParentVersion(pom, artifactVersion.toString())) {
-                    if (getLog().isDebugEnabled()) {
-                        getLog().debug("Made an update from "
-                                + getProject().getParent().getVersion() + " to " + artifactVersion);
-                    }
-                    getChangeRecorder()
-                            .recordChange(DefaultDependencyChangeRecord.builder()
-                                    .withKind(DependencyChangeRecord.ChangeKind.PARENT)
-                                    .withGroupId(getProject().getParent().getGroupId())
-                                    .withArtifactId(getProject().getParent().getArtifactId())
-                                    .withOldVersion(getProject().getParent().getVersion())
-                                    .withNewVersion(artifactVersion.toString())
-                                    .build());
+            if (PomHelper.setProjectParentVersion(pom, parentVersion)) {
+                if (getLog().isDebugEnabled()) {
+                    getLog().debug("Made an update from "
+                            + getProject().getParent().getVersion() + " to " + parentVersion);
                 }
+                getChangeRecorder()
+                        .recordChange(DefaultDependencyChangeRecord.builder()
+                                .withKind(DependencyChangeRecord.ChangeKind.PARENT)
+                                .withGroupId(getProject().getParent().getGroupId())
+                                .withArtifactId(getProject().getParent().getArtifactId())
+                                .withOldVersion(getProject().getParent().getVersion())
+                                .withNewVersion(parentVersion)
+                                .build());
             }
-        } catch (InvalidVersionSpecificationException e) {
-            throw new MojoExecutionException("Invalid version range specification: " + parentVersion, e);
-        } catch (InvalidSegmentException e) {
-            throw new MojoExecutionException("Invalid segment specification for version " + parentVersion, e);
         }
     }
 
-    protected ArtifactVersion resolveTargetVersion()
-            throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
-        Artifact artifact = getHelper()
-                .createDependencyArtifact(DependencyBuilder.newBuilder()
-                        .withGroupId(getProject().getParent().getGroupId())
-                        .withArtifactId(getProject().getParent().getArtifactId())
-                        .withVersion(getProject().getParent().getVersion())
-                        .withType("pom")
-                        .build());
-
-        VersionRange targetVersionRange = VersionRange.createFromVersionSpec(parentVersion);
-        if (targetVersionRange != null && targetVersionRange.getRecommendedVersion() != null) {
-            targetVersionRange = targetVersionRange.restrict(
-                    VersionRange.createFromVersionSpec("[" + targetVersionRange.getRecommendedVersion() + ",)"));
+    private Optional<VersionRange> getTargetVersionRange() throws InvalidVersionSpecificationException {
+        try {
+            return Optional.ofNullable(parentVersion)
+                    .filter(v -> !StringUtils.isBlank(v))
+                    .map(v -> {
+                        try {
+                            VersionRange r = VersionRange.createFromVersionSpec(v);
+                            if (r.getRecommendedVersion() != null) {
+                                return r.restrict(VersionRange.createFromVersionSpec(r.getRecommendedVersion() + ",)"));
+                            }
+                            return r;
+                        } catch (InvalidVersionSpecificationException e) {
+                            throw new IllegalArgumentException(e);
+                        }
+                    });
+        } catch (IllegalArgumentException e) {
+            if (e.getCause() instanceof InvalidVersionSpecificationException) {
+                throw (InvalidVersionSpecificationException) e.getCause();
+            }
+            throw e;
         }
-
-        final ArtifactVersions versions = getHelper().lookupArtifactVersions(artifact, false);
-        Optional<Segment> unchangedSegment = SegmentUtils.determineUnchangedSegment(
-                allowMajorUpdates, allowMinorUpdates, allowIncrementalUpdates, getLog());
-
-        // currentVersion (set to parentVersion here) is not included in the version range for searching upgrades
-        // unless we set allowDowngrade to true
-
-        VersionRange finalTargetVersionRange = targetVersionRange;
-        return stream(
-                        reverse(versions.getNewerVersions(
-                                        getProject().getParent().getVersion(),
-                                        unchangedSegment,
-                                        allowSnapshots,
-                                        allowDowngrade))
-                                .spliterator(),
-                        false)
-                .filter(v -> finalTargetVersionRange == null
-                        || ArtifactVersions.isVersionInRange(v, finalTargetVersionRange))
-                .findFirst()
-                .map(candidate -> {
-                    if (shouldApplyUpdate(artifact, getProject().getParent().getVersion(), candidate, forceUpdate)) {
-                        return candidate;
-                    } else {
-                        getLog().debug("Update not applied. Exiting.");
-                        return null;
-                    }
-                })
-                .orElseGet(() -> {
-                    if (versions.isEmpty(allowSnapshots)) {
-                        getLog().info("No versions found");
-                    } else {
-                        getLog().info("The parent project is the latest version");
-                    }
-                    return null;
-                });
-    }
-
-    private static <T> Iterable<T> reverse(T[] array) {
-        return Arrays.stream(array).sorted(Collections.reverseOrder()).collect(Collectors.toList());
     }
 }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
index a0adb196..98594e23 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojo.java
@@ -68,6 +68,30 @@ public class UpdatePropertiesMojo extends UpdatePropertiesMojoBase {
     @Parameter(property = "excludeProperties")
     private String excludeProperties = null;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     @Inject
     public UpdatePropertiesMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -77,6 +101,21 @@ public class UpdatePropertiesMojo extends UpdatePropertiesMojoBase {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojoBase.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojoBase.java
index 9494d420..1534f6e9 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojoBase.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertiesMojoBase.java
@@ -115,10 +115,29 @@ public abstract class UpdatePropertiesMojoBase extends AbstractVersionsDependenc
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
-    @Override
-    protected boolean isAllowSnapshots() {
-        return allowSnapshots;
-    }
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
 
     public UpdatePropertiesMojoBase(
             ArtifactHandlerManager artifactHandlerManager,
@@ -128,6 +147,11 @@ public abstract class UpdatePropertiesMojoBase extends AbstractVersionsDependenc
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getAllowSnapshots() {
+        return allowSnapshots;
+    }
+
     protected void update(MutableXMLStreamReader pom, Map<Property, PropertyVersions> propertyVersions)
             throws XMLStreamException {
         for (Map.Entry<Property, PropertyVersions> entry : propertyVersions.entrySet()) {
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
index e03a6e0a..ddf2e8dd 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UpdatePropertyMojo.java
@@ -71,6 +71,30 @@ public class UpdatePropertyMojo extends UpdatePropertiesMojoBase {
     @Parameter(property = "newVersion")
     private String newVersion = null;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     @Inject
     public UpdatePropertyMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -80,6 +104,21 @@ public class UpdatePropertyMojo extends UpdatePropertiesMojoBase {
         super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
     }
 
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     /**
      * @param pom the pom to update.
      * @throws MojoExecutionException when things go wrong
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseDepVersionMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseDepVersionMojo.java
index 40f14d75..52e8544a 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseDepVersionMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseDepVersionMojo.java
@@ -98,8 +98,47 @@ public class UseDepVersionMojo extends AbstractVersionsDependencyUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
+    @Override
+    protected final boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected final boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public final boolean getProcessParent() {
+        return processParent;
+    }
+
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return allowSnapshots;
     }
 
@@ -212,7 +251,7 @@ public class UseDepVersionMojo extends AbstractVersionsDependencyUpdaterMojo {
 
         // 2) process dependencies and properties from this node
         try {
-            if (isProcessingDependencyManagement() && node.getModel().getDependencyManagement() != null) {
+            if (getProcessDependencyManagement() && node.getModel().getDependencyManagement() != null) {
                 useDepVersion(
                         node,
                         node.getModel().getDependencyManagement().getDependencies(),
@@ -221,7 +260,7 @@ public class UseDepVersionMojo extends AbstractVersionsDependencyUpdaterMojo {
                         propertyConflicts);
             }
 
-            if (isProcessingDependencies()) {
+            if (getProcessDependencies()) {
                 useDepVersion(
                         node,
                         getDependencies(node.getModel()),
@@ -230,7 +269,7 @@ public class UseDepVersionMojo extends AbstractVersionsDependencyUpdaterMojo {
                         propertyConflicts);
             }
 
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 useDepVersion(
                         node,
                         singletonList(getParentDependency()),
@@ -373,7 +412,7 @@ public class UseDepVersionMojo extends AbstractVersionsDependencyUpdaterMojo {
 
         // 2nd pass: check dependencies
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring a reactor dependency: " + toString(dep));
                 continue;
             }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextReleasesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextReleasesMojo.java
index 9f77f5dc..7db052f3 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextReleasesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextReleasesMojo.java
@@ -50,6 +50,30 @@ public class UseNextReleasesMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowDowngrade", defaultValue = "false")
     protected boolean allowDowngrade;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     @Inject
     public UseNextReleasesMojo(
             ArtifactHandlerManager artifactHandlerManager,
@@ -60,27 +84,42 @@ public class UseNextReleasesMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowMinorUpdates() {
+    protected boolean getAllowMinorUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowIncrementalUpdates() {
+    protected boolean getAllowIncrementalUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return false;
     }
 
     @Override
-    protected boolean isAllowDowngrade() {
+    protected boolean getAllowDowngrade() {
         return allowDowngrade;
     }
 
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextSnapshotsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextSnapshotsMojo.java
index 28e6f4ec..fe4c6c3a 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextSnapshotsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextSnapshotsMojo.java
@@ -67,6 +67,30 @@ public class UseNextSnapshotsMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowIncrementalUpdates", defaultValue = "true")
     private boolean allowIncrementalUpdates;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     // ------------------------------ METHODS --------------------------
 
     @Inject
@@ -79,27 +103,42 @@ public class UseNextSnapshotsMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
         return allowMajorUpdates;
     }
 
     @Override
-    protected boolean isAllowMinorUpdates() {
+    protected boolean getAllowMinorUpdates() {
         return allowMinorUpdates;
     }
 
     @Override
-    protected boolean isAllowIncrementalUpdates() {
+    protected boolean getAllowIncrementalUpdates() {
         return allowIncrementalUpdates;
     }
 
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return true;
     }
 
     @Override
-    protected boolean isAllowDowngrade() {
+    protected boolean getAllowDowngrade() {
         return false;
     }
 
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextVersionsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextVersionsMojo.java
index 308cdfb9..68392f7b 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextVersionsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseNextVersionsMojo.java
@@ -57,8 +57,32 @@ public class UseNextVersionsMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return allowSnapshots;
     }
 
@@ -74,22 +98,37 @@ public class UseNextVersionsMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowMinorUpdates() {
+    protected boolean getAllowMinorUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowIncrementalUpdates() {
+    protected boolean getAllowIncrementalUpdates() {
         return true;
     }
 
     @Override
-    protected boolean isAllowDowngrade() {
+    protected boolean getAllowDowngrade() {
         return allowDowngrade;
     }
 
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReactorMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReactorMojo.java
index 65044dca..b6b18a14 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReactorMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReactorMojo.java
@@ -60,8 +60,47 @@ public class UseReactorMojo extends AbstractVersionsDependencyUpdaterMojo {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return allowSnapshots;
     }
 
@@ -86,17 +125,17 @@ public class UseReactorMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
         try {
-            if (isProcessingParent() && getProject().hasParent()) {
+            if (getProcessParent() && getProject().hasParent()) {
                 useReactor(pom, getProject().getParent());
             }
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
                     useReactor(pom, dependencyManagement.getDependencies());
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 useReactor(pom, getProject().getDependencies());
             }
         } catch (IOException e) {
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReleasesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReleasesMojo.java
index 19de874a..898500da 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReleasesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseReleasesMojo.java
@@ -74,8 +74,47 @@ public class UseReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
     @Parameter(property = "failIfNotReplaced", defaultValue = "false")
     protected boolean failIfNotReplaced;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
+    @Override
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return false;
     }
 
@@ -100,7 +139,7 @@ public class UseReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
         try {
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
@@ -110,10 +149,10 @@ public class UseReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
                             DependencyChangeRecord.ChangeKind.DEPENDENCY_MANAGEMENT);
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 useReleases(pom, getProject().getDependencies(), DependencyChangeRecord.ChangeKind.DEPENDENCY);
             }
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 useReleases(pom, singletonList(getParentDependency()), DependencyChangeRecord.ChangeKind.PARENT);
             }
         } catch (IOException e) {
@@ -127,7 +166,7 @@ public class UseReleasesMojo extends AbstractVersionsDependencyUpdaterMojo {
             DependencyChangeRecord.ChangeKind changeKind)
             throws XMLStreamException, MojoExecutionException, VersionRetrievalException {
         for (Dependency dep : dependencies) {
-            if (isExcludeReactor() && isProducedByReactor(dep)) {
+            if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring reactor dependency: " + toString(dep));
                 continue;
             }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/VersionInformation.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/VersionInformation.java
deleted file mode 100644
index 1cfbe492..00000000
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/VersionInformation.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package org.codehaus.mojo.versions;
-
-/*
- * The MIT License
- *
- * Copyright (c) 2016, 2017 Karl Heinz Marbaise
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- * of the Software, and to permit persons to whom the Software is furnished to do
- * so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * This class will parse the version based on the given pattern in
- * {@code  org.codehaus.mojo.buildhelper.ParseVersionMojo}.
- *
- * @author Karl Heinz Marbaise
- * <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
- *
- */
-public class VersionInformation {
-
-    private static final String MAJOR_MINOR_PATCH_PATTERN = "^((\\d+)(\\.(\\d+)(\\.(\\d+))?)?)";
-
-    private static final Pattern MAJOR_MINOR_PATCH = Pattern.compile(MAJOR_MINOR_PATCH_PATTERN);
-
-    private static final Pattern DIGITS = Pattern.compile(MAJOR_MINOR_PATCH_PATTERN + "(.*)$");
-
-    private static final Pattern BUILD_NUMBER = Pattern.compile("(((\\-)(\\d+)(.*))?)|(\\.(.*))|(\\-(.*))|(.*)$");
-
-    private int major;
-
-    private int minor;
-
-    private int patch;
-
-    private long buildNumber;
-
-    private String qualifier;
-
-    private void parseBuildNumber(String buildNumberPart) {
-        Matcher matcher = BUILD_NUMBER.matcher(buildNumberPart);
-        if (matcher.matches()) {
-            String buildNumber = matcher.group(4);
-            String qualifier = matcher.group(5);
-
-            if (buildNumber != null) {
-                setBuildNumber(Long.parseLong(buildNumber));
-            }
-
-            if (matcher.group(7) != null) {
-                qualifier = matcher.group(7);
-            }
-            // Starting with "-"
-            if (matcher.group(9) != null) {
-                qualifier = matcher.group(9);
-            }
-            if (qualifier != null) {
-                if (qualifier.trim().length() == 0) {
-                    setQualifier(null);
-                } else {
-                    setQualifier(qualifier);
-                }
-            } else {
-                setQualifier(null);
-            }
-        }
-    }
-
-    private void parseMajorMinorPatchVersion(String version) {
-        Matcher matcher = MAJOR_MINOR_PATCH.matcher(version);
-        if (matcher.matches()) {
-            String majorString = matcher.group(2);
-            String minorString = matcher.group(4);
-            String patchString = matcher.group(6);
-
-            if (majorString != null) {
-                setMajor(Integer.parseInt(majorString));
-            }
-            if (minorString != null) {
-                setMinor(Integer.parseInt(minorString));
-            }
-            if (patchString != null) {
-                setPatch(Integer.parseInt(patchString));
-            }
-        }
-    }
-
-    public VersionInformation(String version) {
-        Matcher matcherDigits = DIGITS.matcher(version);
-        if (matcherDigits.matches()) {
-            parseMajorMinorPatchVersion(matcherDigits.group(1));
-            parseBuildNumber(matcherDigits.group(7));
-        } else {
-            setQualifier(version);
-        }
-    }
-
-    public int getMajor() {
-        return major;
-    }
-
-    public void setMajor(int major) {
-        this.major = major;
-    }
-
-    public int getMinor() {
-        return minor;
-    }
-
-    public void setMinor(int minor) {
-        this.minor = minor;
-    }
-
-    public int getPatch() {
-        return patch;
-    }
-
-    public void setPatch(int patch) {
-        this.patch = patch;
-    }
-
-    public long getBuildNumber() {
-        return buildNumber;
-    }
-
-    public void setBuildNumber(long buildNumber) {
-        this.buildNumber = buildNumber;
-    }
-
-    public String getQualifier() {
-        return qualifier;
-    }
-
-    public void setQualifier(String qualifier) {
-        this.qualifier = qualifier;
-    }
-
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(this.getMajor());
-        sb.append("." + this.getMinor());
-        sb.append("." + this.getPatch());
-
-        if (this.getQualifier() != null || this.getBuildNumber() != 0) {
-
-            if (this.getBuildNumber() != 0) {
-                sb.append("-");
-                sb.append(this.getBuildNumber());
-            }
-            if (this.getQualifier() != null) {
-                sb.append("-");
-                sb.append(this.getQualifier());
-            }
-        }
-
-        return sb.toString();
-    }
-}


Test patch:
diff --git a/versions-maven-plugin/src/it/it-update-parent-latest-version/verify.groovy b/versions-maven-plugin/src/it/it-update-parent-latest-version/verify.groovy
index 0535596f..ddd292a2 100644
--- a/versions-maven-plugin/src/it/it-update-parent-latest-version/verify.groovy
+++ b/versions-maven-plugin/src/it/it-update-parent-latest-version/verify.groovy
@@ -1,10 +1,4 @@
-
 import groovy.xml.XmlSlurper
 
 def project = new XmlSlurper().parse( new File( basedir, 'pom.xml' ) )
 assert project.parent.version == '70'
-
-
-def buildLog = new File( basedir, "build.log")
-
-assert buildLog.text.contains( '[INFO] The parent project is the latest version')
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestReleasesMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestReleasesMojo.java
index d356bba2..c3a42cc7 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestReleasesMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestReleasesMojo.java
@@ -85,6 +85,30 @@ public class UseLatestReleasesMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowDowngrade", defaultValue = "false")
     protected boolean allowDowngrade;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     // ------------------------------ METHODS --------------------------
 
     @Inject
@@ -97,33 +121,48 @@ public class UseLatestReleasesMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected final boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected final boolean getAllowMajorUpdates() {
         return allowMajorUpdates;
     }
 
     @Override
-    protected final boolean isAllowMinorUpdates() {
+    protected final boolean getAllowMinorUpdates() {
         return allowMinorUpdates;
     }
 
     @Override
-    protected final boolean isAllowIncrementalUpdates() {
+    protected final boolean getAllowIncrementalUpdates() {
         return allowIncrementalUpdates;
     }
 
     @Override
-    protected final boolean isAllowSnapshots() {
+    protected final boolean getAllowSnapshots() {
         return false;
     }
 
     @Override
-    protected final boolean isAllowDowngrade() {
+    protected final boolean getAllowDowngrade() {
         return allowDowngrade;
     }
 
     @Override
     protected boolean updateFilter(Dependency dep) {
-        return isAllowDowngrade() || !ArtifactUtils.isSnapshot(dep.getVersion());
+        return getAllowDowngrade() || !ArtifactUtils.isSnapshot(dep.getVersion());
     }
 
     @Override
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestSnapshotsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestSnapshotsMojo.java
index 906cf197..51632e06 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestSnapshotsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestSnapshotsMojo.java
@@ -68,6 +68,30 @@ public class UseLatestSnapshotsMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowIncrementalUpdates", defaultValue = "true")
     protected boolean allowIncrementalUpdates;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     // ------------------------------ METHODS --------------------------
 
     @Inject
@@ -80,17 +104,32 @@ public class UseLatestSnapshotsMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
         return allowMajorUpdates;
     }
 
     @Override
-    protected boolean isAllowMinorUpdates() {
+    protected boolean getAllowMinorUpdates() {
         return allowMinorUpdates;
     }
 
     @Override
-    protected boolean isAllowIncrementalUpdates() {
+    protected boolean getAllowIncrementalUpdates() {
         return allowIncrementalUpdates;
     }
 
@@ -110,12 +149,12 @@ public class UseLatestSnapshotsMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected final boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return true;
     }
 
     @Override
-    protected final boolean isAllowDowngrade() {
+    protected boolean getAllowDowngrade() {
         return false;
     }
 }
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojo.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojo.java
index 56897e40..6951cb23 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojo.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojo.java
@@ -84,8 +84,32 @@ public class UseLatestVersionsMojo extends UseLatestVersionsMojoBase {
     @Parameter(property = "allowSnapshots", defaultValue = "false")
     protected boolean allowSnapshots;
 
+    /**
+     * Whether to process the dependencies section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencies", defaultValue = "true")
+    private boolean processDependencies = true;
+
+    /**
+     * Whether to process the dependencyManagement section of the project.
+     *
+     * @since 1.0-alpha-3
+     */
+    @Parameter(property = "processDependencyManagement", defaultValue = "true")
+    private boolean processDependencyManagement = true;
+
+    /**
+     * Whether to process the parent section of the project. If not set will default to false.
+     *
+     * @since 2.3
+     */
+    @Parameter(property = "processParent", defaultValue = "false")
+    private boolean processParent = false;
+
     @Override
-    protected boolean isAllowSnapshots() {
+    protected boolean getAllowSnapshots() {
         return allowSnapshots;
     }
 
@@ -101,22 +125,37 @@ public class UseLatestVersionsMojo extends UseLatestVersionsMojoBase {
     }
 
     @Override
-    protected final boolean isAllowMajorUpdates() {
+    protected boolean getProcessDependencies() {
+        return processDependencies;
+    }
+
+    @Override
+    protected boolean getProcessDependencyManagement() {
+        return processDependencyManagement;
+    }
+
+    @Override
+    public boolean getProcessParent() {
+        return processParent;
+    }
+
+    @Override
+    protected boolean getAllowMajorUpdates() {
         return allowMajorUpdates;
     }
 
     @Override
-    protected final boolean isAllowMinorUpdates() {
+    protected boolean getAllowMinorUpdates() {
         return allowMinorUpdates;
     }
 
     @Override
-    protected final boolean isAllowIncrementalUpdates() {
+    protected boolean getAllowIncrementalUpdates() {
         return allowIncrementalUpdates;
     }
 
     @Override
-    protected boolean isAllowDowngrade() {
+    protected boolean getAllowDowngrade() {
         return allowDowngrade;
     }
 
diff --git a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojoBase.java b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojoBase.java
index 2a38e776..6597d107 100644
--- a/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojoBase.java
+++ b/versions-maven-plugin/src/main/java/org/codehaus/mojo/versions/UseLatestVersionsMojoBase.java
@@ -51,21 +51,14 @@ import static java.util.Collections.singletonList;
  * and {@link UseLatestReleasesMojo}
  */
 public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependencyUpdaterMojo {
-    public UseLatestVersionsMojoBase(
-            ArtifactHandlerManager artifactHandlerManager,
-            RepositorySystem repositorySystem,
-            Map<String, Wagon> wagonMap,
-            Map<String, ChangeRecorder> changeRecorders) {
-        super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
-    }
 
-    protected abstract boolean isAllowMajorUpdates();
+    protected abstract boolean getAllowMajorUpdates();
 
-    protected abstract boolean isAllowMinorUpdates();
+    protected abstract boolean getAllowMinorUpdates();
 
-    protected abstract boolean isAllowIncrementalUpdates();
+    protected abstract boolean getAllowIncrementalUpdates();
 
-    protected abstract boolean isAllowDowngrade();
+    protected abstract boolean getAllowDowngrade();
 
     protected abstract boolean updateFilter(Dependency dep);
 
@@ -73,6 +66,14 @@ public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependen
 
     protected abstract Optional<ArtifactVersion> versionProducer(Stream<ArtifactVersion> stream);
 
+    public UseLatestVersionsMojoBase(
+            ArtifactHandlerManager artifactHandlerManager,
+            RepositorySystem repositorySystem,
+            Map<String, Wagon> wagonMap,
+            Map<String, ChangeRecorder> changeRecorders) {
+        super(artifactHandlerManager, repositorySystem, wagonMap, changeRecorders);
+    }
+
     /**
      * @param pom the pom to update.
      * @throws org.apache.maven.plugin.MojoExecutionException when things go wrong
@@ -82,14 +83,14 @@ public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependen
      */
     protected void update(MutableXMLStreamReader pom)
             throws MojoExecutionException, MojoFailureException, XMLStreamException, VersionRetrievalException {
-        if (isAllowDowngrade() && isAllowSnapshots()) {
+        if (getAllowDowngrade() && getAllowSnapshots()) {
             throw new MojoExecutionException("allowDowngrade is only valid with allowSnapshots equal to false");
         }
 
         Optional<Segment> unchangedSegment = SegmentUtils.determineUnchangedSegment(
-                isAllowMajorUpdates(), isAllowMinorUpdates(), isAllowIncrementalUpdates(), getLog());
+                getAllowMajorUpdates(), getAllowMinorUpdates(), getAllowIncrementalUpdates(), getLog());
         try {
-            if (isProcessingDependencyManagement()) {
+            if (getProcessDependencyManagement()) {
                 DependencyManagement dependencyManagement =
                         PomHelper.getRawModel(getProject()).getDependencyManagement();
                 if (dependencyManagement != null) {
@@ -100,14 +101,14 @@ public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependen
                             unchangedSegment);
                 }
             }
-            if (getProject().getDependencies() != null && isProcessingDependencies()) {
+            if (getProject().getDependencies() != null && getProcessDependencies()) {
                 update(
                         pom,
                         getProject().getDependencies(),
                         DependencyChangeRecord.ChangeKind.DEPENDENCY,
                         unchangedSegment);
             }
-            if (getProject().getParent() != null && isProcessingParent()) {
+            if (getProject().getParent() != null && getProcessParent()) {
                 update(
                         pom,
                         singletonList(getParentDependency()),
@@ -128,7 +129,7 @@ public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependen
         for (Dependency dep : dependencies) {
             if (!updateFilter(dep)) {
                 continue;
-            } else if (isExcludeReactor() && isProducedByReactor(dep)) {
+            } else if (getExcludeReactor() && isProducedByReactor(dep)) {
                 getLog().info("Ignoring reactor dependency: " + toString(dep));
                 continue;
             } else if (isHandledByProperty(dep)) {
@@ -148,7 +149,7 @@ public abstract class UseLatestVersionsMojoBase extends AbstractVersionsDependen
             ArtifactVersions versions = getHelper().lookupArtifactVersions(artifact, false);
             try {
                 Optional<ArtifactVersion> newestVer = versionProducer(Arrays.stream(versions.getNewerVersions(
-                                dep.getVersion(), unchangedSegment, isAllowSnapshots(), isAllowDowngrade()))
+                                dep.getVersion(), unchangedSegment, getAllowSnapshots(), getAllowDowngrade()))
                         .filter(this::artifactVersionsFilter));
                 if (newestVer.isPresent()) {
                     updateDependencyVersion(pom, dep, newestVer.get().toString(), changeKind);
diff --git a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SeparatePatternsForIncludesAnExcludesTest.java b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SeparatePatternsForIncludesAnExcludesTest.java
index e3aaa628..eea66c7a 100644
--- a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SeparatePatternsForIncludesAnExcludesTest.java
+++ b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/SeparatePatternsForIncludesAnExcludesTest.java
@@ -16,7 +16,22 @@ public class SeparatePatternsForIncludesAnExcludesTest {
     public void setUp() throws Exception {
         mojo = new AbstractVersionsDependencyUpdaterMojo(null, null, null, null) {
             @Override
-            protected boolean isAllowSnapshots() {
+            protected boolean getProcessDependencies() {
+                return true;
+            }
+
+            @Override
+            protected boolean getProcessDependencyManagement() {
+                return true;
+            }
+
+            @Override
+            public boolean getProcessParent() {
+                return false;
+            }
+
+            @Override
+            protected boolean getAllowSnapshots() {
                 return false;
             }
 
diff --git a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UpdateParentMojoTest.java b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UpdateParentMojoTest.java
index d8d2a14a..780bdb19 100644
--- a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UpdateParentMojoTest.java
+++ b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UpdateParentMojoTest.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
-import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
 import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Model;
@@ -31,7 +30,6 @@ import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.testing.stubs.DefaultArtifactHandlerStub;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.mojo.versions.api.PomHelper;
 import org.codehaus.mojo.versions.api.VersionRetrievalException;
 import org.codehaus.mojo.versions.change.DefaultDependencyVersionChange;
 import org.codehaus.mojo.versions.ordering.InvalidSegmentException;
@@ -40,7 +38,6 @@ import org.eclipse.aether.RepositorySystem;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.MockedStatic;
 
 import static java.util.Collections.singleton;
 import static org.apache.maven.artifact.Artifact.SCOPE_COMPILE;
@@ -52,16 +49,11 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.hasItem;
 import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mockStatic;
 
-public class UpdateParentMojoTest {
+public class UpdateParentMojoTest extends UseLatestVersionsMojoTestBase {
     private TestChangeRecorder changeRecorder;
 
-    private UpdateParentMojo mojo;
-
     private static ArtifactHandlerManager artifactHandlerManager;
 
     private static RepositorySystem repositorySystem;
@@ -112,12 +104,98 @@ public class UpdateParentMojoTest {
                         setVersion("1.0.1-SNAPSHOT");
                     }
                 });
+
+                setParentArtifact(new DefaultArtifact(
+                        getParent().getGroupId(),
+                        getParent().getArtifactId(),
+                        getParent().getVersion(),
+                        SCOPE_COMPILE,
+                        "pom",
+                        "default",
+                        null));
+            }
+        };
+    }
+
+    @Test
+    public void testIgnoredVersions()
+            throws MojoExecutionException, IllegalAccessException, VersionRetrievalException, XMLStreamException,
+                    MojoFailureException {
+        MavenProject parent = new MavenProject() {
+            {
+                setGroupId("default-group");
+                setArtifactId("parent-artifact");
+                setVersion("0.9.0");
+            }
+        };
+        mojo.getProject().setParent(parent);
+        mojo.getProject()
+                .setParentArtifact(new DefaultArtifact(
+                        parent.getGroupId(),
+                        parent.getArtifactId(),
+                        parent.getVersion(),
+                        SCOPE_COMPILE,
+                        "pom",
+                        "default",
+                        null));
+        setVariableValueToObject(mojo, "ignoredVersions", singleton("1.0.0"));
+        tryUpdate();
+        assertThat(changeRecorder.getChanges(), empty());
+    }
+
+    @Test
+    public void testIncludeFilter()
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, IllegalAccessException,
+                    VersionRetrievalException {
+        MavenProject parent = new MavenProject() {
+            {
+                setGroupId("default-group");
+                setArtifactId("other-artifact");
+                setVersion("0.9.0");
             }
         };
+        mojo.getProject().setParent(parent);
+        mojo.getProject()
+                .setParentArtifact(new DefaultArtifact(
+                        parent.getGroupId(),
+                        parent.getArtifactId(),
+                        parent.getVersion(),
+                        SCOPE_COMPILE,
+                        "pom",
+                        "default",
+                        null));
+        setVariableValueToObject(mojo, "includes", new String[] {"default-group:parent-artifact"});
+        tryUpdate();
+        assertThat(changeRecorder.getChanges(), empty());
+    }
+
+    @Test
+    public void testExcludeFilter()
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, IllegalAccessException,
+                    VersionRetrievalException {
+        MavenProject parent = new MavenProject() {
+            {
+                setGroupId("default-group");
+                setArtifactId("parent-artifact");
+                setVersion("0.9.0");
+            }
+        };
+        mojo.getProject().setParent(parent);
+        mojo.getProject()
+                .setParentArtifact(new DefaultArtifact(
+                        parent.getGroupId(),
+                        parent.getArtifactId(),
+                        parent.getVersion(),
+                        SCOPE_COMPILE,
+                        "pom",
+                        "default",
+                        null));
+        setVariableValueToObject(mojo, "excludes", new String[] {"default-group:parent-artifact"});
+        tryUpdate();
+        assertThat(changeRecorder.getChanges(), empty());
     }
 
     @Test
-    @SuppressWarnings("deprecation")
     public void testArtifactIdDoesNotExist()
             throws VersionRetrievalException, MojoExecutionException, XMLStreamException, MojoFailureException,
                     InvalidVersionSpecificationException, VersionRetrievalException {
@@ -141,24 +219,15 @@ public class UpdateParentMojoTest {
                 mojo.findLatestVersion(artifact, VersionRange.createFromVersionSpec("1.0.1-SNAPSHOT"), null, false),
                 is(nullValue()));
 
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        tryUpdate();
     }
 
     @Test
     public void testParentDowngradeAllowed()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
-        mojo.allowDowngrade = true;
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
+        setVariableValueToObject(mojo, "allowDowngrade", true);
+        tryUpdate();
         assertThat(
                 changeRecorder.getChanges(),
                 hasItem(new DefaultDependencyVersionChange(
@@ -167,22 +236,18 @@ public class UpdateParentMojoTest {
 
     @Test
     public void testParentDowngradeForbidden()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
-        mojo.allowDowngrade = false;
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
+        setVariableValueToObject(mojo, "allowDowngrade", false);
+        tryUpdate();
         assertThat(changeRecorder.getChanges(), is(empty()));
     }
 
     @Test
     public void testParentDowngradeAllowedWithRange()
             throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
-        mojo.allowDowngrade = true;
+                    InvalidSegmentException, IllegalAccessException, XMLStreamException, MojoFailureException {
+        setVariableValueToObject(mojo, "allowDowngrade", true);
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -190,26 +255,28 @@ public class UpdateParentMojoTest {
                 setVersion("[1.0.1-SNAPSHOT,)");
             }
         });
-        ArtifactVersion newVersion = mojo.resolveTargetVersion();
-        assertThat(newVersion, notNullValue());
-        assertThat(newVersion.toString(), is("1.0.0"));
+        tryUpdate();
+        assertThat(
+                changeRecorder.getChanges(),
+                hasItem(new DefaultDependencyVersionChange(
+                        "default-group", "parent-artifact", "[1.0.1-SNAPSHOT,)", "1.0.0")));
     }
 
     @Test
     public void testParentDowngradeForbiddenWithRange()
             throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
-        mojo.allowDowngrade = false;
-        mojo.parentVersion = "[1.0.1-SNAPSHOT,)";
-        ArtifactVersion newVersion = mojo.resolveTargetVersion();
-        assertThat(newVersion, nullValue());
+                    InvalidSegmentException, IllegalAccessException, XMLStreamException, MojoFailureException {
+        setVariableValueToObject(mojo, "allowDowngrade", false);
+        setVariableValueToObject(mojo, "parentVersion", "[1.0.1-SNAPSHOT,)");
+        tryUpdate();
+        assertThat(changeRecorder.getChanges(), is(empty()));
     }
 
     @Test
     public void testAllowSnapshots()
             throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
-        mojo.allowSnapshots = true;
+                    InvalidSegmentException, IllegalAccessException, XMLStreamException, MojoFailureException {
+        setVariableValueToObject(mojo, "allowSnapshots", true);
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -217,17 +284,19 @@ public class UpdateParentMojoTest {
                 setVersion("0.0.1-1");
             }
         });
-
-        ArtifactVersion newVersion = mojo.resolveTargetVersion();
-        assertThat(newVersion, notNullValue());
-        assertThat(newVersion.toString(), is("0.0.1-1-impl-SNAPSHOT"));
+        tryUpdate();
+        assertThat(
+                changeRecorder.getChanges(),
+                hasItem(new DefaultDependencyVersionChange(
+                        "default-group", "issue-670-artifact", "0.0.1-1", "0.0.1-1-impl-SNAPSHOT")));
     }
 
     @Test
     public void testAllowSnapshotsWithParentVersion()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
-        mojo.allowSnapshots = true;
-        mojo.parentVersion = "0.0.1-1-impl-SNAPSHOT";
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
+        setVariableValueToObject(mojo, "allowSnapshots", true);
+        setVariableValueToObject(mojo, "parentVersion", "0.0.1-1-impl-SNAPSHOT");
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -236,12 +305,7 @@ public class UpdateParentMojoTest {
             }
         });
 
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        tryUpdate();
         assertThat(
                 changeRecorder.getChanges(),
                 hasItem(new DefaultDependencyVersionChange(
@@ -249,38 +313,31 @@ public class UpdateParentMojoTest {
     }
 
     @Test
-    public void testIgnoredVersions()
-            throws MojoExecutionException, IllegalAccessException, VersionRetrievalException,
-                    InvalidVersionSpecificationException, InvalidSegmentException {
-        mojo.getProject().setParent(new MavenProject() {
-            {
-                setGroupId("default-group");
-                setArtifactId("parent-artifact");
-                setVersion("0.9.0");
-            }
-        });
-        setVariableValueToObject(mojo, "ignoredVersions", singleton("1.0.0"));
-        assertThat(mojo.resolveTargetVersion(), nullValue());
-    }
-
-    @Test
-    public void testSkipResolutionDowngradeUnknownVersion() throws VersionRetrievalException {
+    public void testSkipResolutionDowngradeUnknownVersion()
+            throws VersionRetrievalException, MojoExecutionException, XMLStreamException, MojoFailureException,
+                    IllegalAccessException {
         testSkipResolution("0.8.0");
     }
 
     @Test
-    public void testSkipResolutionDowngrade() throws VersionRetrievalException {
+    public void testSkipResolutionDowngrade()
+            throws VersionRetrievalException, MojoExecutionException, XMLStreamException, MojoFailureException,
+                    IllegalAccessException {
         testSkipResolution("0.9.0");
     }
 
     @Test
-    public void testSkipResolutionUpgradeUnknownVersion() throws VersionRetrievalException {
+    public void testSkipResolutionUpgradeUnknownVersion()
+            throws VersionRetrievalException, MojoExecutionException, XMLStreamException, MojoFailureException,
+                    IllegalAccessException {
         testSkipResolution("2.0.0");
     }
 
-    private void testSkipResolution(String version) throws VersionRetrievalException {
-        mojo.parentVersion = version;
-        mojo.skipResolution = true;
+    private void testSkipResolution(String version)
+            throws VersionRetrievalException, IllegalAccessException, MojoExecutionException, XMLStreamException,
+                    MojoFailureException {
+        setVariableValueToObject(mojo, "parentVersion", version);
+        setVariableValueToObject(mojo, "skipResolution", true);
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -289,15 +346,7 @@ public class UpdateParentMojoTest {
             }
         });
 
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        } catch (MojoExecutionException | XMLStreamException | MojoFailureException e) {
-            throw new RuntimeException(e);
-        }
-
+        tryUpdate();
         assertThat(
                 changeRecorder.getChanges(),
                 hasItem(new DefaultDependencyVersionChange("default-group", "parent-artifact", "1.0.0", version)));
@@ -305,7 +354,8 @@ public class UpdateParentMojoTest {
 
     @Test
     public void testShouldUpgradeToSnapshot()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -313,14 +363,9 @@ public class UpdateParentMojoTest {
                 setVersion("0.9.0");
             }
         });
-        mojo.allowSnapshots = true;
-        mojo.parentVersion = "[0,1.0.1-SNAPSHOT]";
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        setVariableValueToObject(mojo, "allowSnapshots", true);
+        setVariableValueToObject(mojo, "parentVersion", "[0,1.0.1-SNAPSHOT]");
+        tryUpdate();
         assertThat(
                 changeRecorder.getChanges(),
                 hasItem(new DefaultDependencyVersionChange(
@@ -330,7 +375,7 @@ public class UpdateParentMojoTest {
     @Test
     public void testAllowMinorUpdates()
             throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
+                    InvalidSegmentException, IllegalAccessException, XMLStreamException, MojoFailureException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -338,20 +383,20 @@ public class UpdateParentMojoTest {
                 setVersion("0.8.0");
             }
         });
-        mojo.allowMajorUpdates = false;
-        mojo.allowMinorUpdates = true;
-        mojo.allowIncrementalUpdates = true;
-        mojo.parentVersion = "0.8.0";
-        ArtifactVersion newVersion = mojo.resolveTargetVersion();
-
-        assertThat(newVersion, notNullValue());
-        assertThat(newVersion.toString(), is("0.9.0"));
+        setVariableValueToObject(mojo, "allowMajorUpdates", false);
+        setVariableValueToObject(mojo, "allowMinorUpdates", true);
+        setVariableValueToObject(mojo, "allowIncrementalUpdates", true);
+        setVariableValueToObject(mojo, "parentVersion", "0.8.0");
+        tryUpdate();
+        assertThat(
+                changeRecorder.getChanges(),
+                hasItem(new DefaultDependencyVersionChange("default-group", "parent-artifact", "0.8.0", "0.9.0")));
     }
 
     @Test
     public void testAllowIncrementalUpdates()
             throws MojoExecutionException, VersionRetrievalException, InvalidVersionSpecificationException,
-                    InvalidSegmentException {
+                    InvalidSegmentException, IllegalAccessException, XMLStreamException, MojoFailureException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -359,18 +404,19 @@ public class UpdateParentMojoTest {
                 setVersion("1.1.0");
             }
         });
-        mojo.allowMajorUpdates = false;
-        mojo.allowMinorUpdates = false;
-        mojo.allowIncrementalUpdates = true;
-        ArtifactVersion newVersion = mojo.resolveTargetVersion();
-
-        assertThat(newVersion, notNullValue());
-        assertThat(newVersion.toString(), is("1.1.1"));
+        setVariableValueToObject(mojo, "allowMajorUpdates", false);
+        setVariableValueToObject(mojo, "allowMinorUpdates", false);
+        setVariableValueToObject(mojo, "allowIncrementalUpdates", true);
+        tryUpdate();
+        assertThat(
+                changeRecorder.getChanges(),
+                hasItem(new DefaultDependencyVersionChange("default-group", "test-incremental", "1.1.0", "1.1.1")));
     }
 
     @Test
     public void testParentVersionRange()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -378,14 +424,9 @@ public class UpdateParentMojoTest {
                 setVersion("1.0");
             }
         });
-        mojo.allowSnapshots = true;
-        mojo.parentVersion = "[,3.0-!)";
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        setVariableValueToObject(mojo, "allowSnapshots", true);
+        setVariableValueToObject(mojo, "parentVersion", "[,3.0-!)");
+        tryUpdate();
         assertThat(
                 changeRecorder.getChanges(),
                 hasItem(new DefaultDependencyVersionChange("default-group", "dummy-parent2", "1.0", "2.0")));
@@ -393,7 +434,8 @@ public class UpdateParentMojoTest {
 
     @Test
     public void testParentVersionRange2()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -401,14 +443,9 @@ public class UpdateParentMojoTest {
                 setVersion("2.0");
             }
         });
-        mojo.allowSnapshots = true;
-        mojo.parentVersion = "[,3.0-!)";
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        setVariableValueToObject(mojo, "allowSnapshots", true);
+        setVariableValueToObject(mojo, "parentVersion", "[,3.0-!)");
+        tryUpdate();
         assertThat(changeRecorder.getChanges(), empty());
     }
 
@@ -417,7 +454,8 @@ public class UpdateParentMojoTest {
      */
     @Test
     public void testIssue1060VersionRangeAllowDowngradeFalse()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -425,14 +463,9 @@ public class UpdateParentMojoTest {
                 setVersion("2.0");
             }
         });
-        mojo.parentVersion = "[,2.9-!)";
-        mojo.allowDowngrade = false;
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        setVariableValueToObject(mojo, "parentVersion", "[,2.9-!)");
+        setVariableValueToObject(mojo, "allowDowngrade", false);
+        tryUpdate();
         assertThat(changeRecorder.getChanges(), empty());
     }
 
@@ -441,7 +474,8 @@ public class UpdateParentMojoTest {
      */
     @Test
     public void testIssue1060VersionRangeAllowDowngradeTrue()
-            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException {
+            throws MojoExecutionException, XMLStreamException, MojoFailureException, VersionRetrievalException,
+                    IllegalAccessException {
         mojo.getProject().setParent(new MavenProject() {
             {
                 setGroupId("default-group");
@@ -449,14 +483,9 @@ public class UpdateParentMojoTest {
                 setVersion("78");
             }
         });
-        mojo.parentVersion = "[,79-!)";
-        mojo.allowDowngrade = true;
-        try (MockedStatic<PomHelper> pomHelper = mockStatic(PomHelper.class)) {
-            pomHelper
-                    .when(() -> PomHelper.setProjectParentVersion(any(), any()))
-                    .thenReturn(true);
-            mojo.update(null);
-        }
+        setVariableValueToObject(mojo, "parentVersion", "[,79-!)");
+        setVariableValueToObject(mojo, "allowDowngrade", true);
+        tryUpdate();
         assertThat(changeRecorder.getChanges(), empty());
     }
 }
diff --git a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UseLatestVersionsMojoTestBase.java b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UseLatestVersionsMojoTestBase.java
index 33e4530b..ac43a641 100644
--- a/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UseLatestVersionsMojoTestBase.java
+++ b/versions-maven-plugin/src/test/java/org/codehaus/mojo/versions/UseLatestVersionsMojoTestBase.java
@@ -28,6 +28,7 @@ import static org.hamcrest.Matchers.hasItem;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.not;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mockStatic;
 
 public abstract class UseLatestVersionsMojoTestBase {
@@ -62,6 +63,9 @@ public abstract class UseLatestVersionsMojoTestBase {
             pomHelper
                     .when(() -> PomHelper.getRawModel(any(MavenProject.class)))
                     .thenReturn(mojo.getProject().getModel());
+            pomHelper
+                    .when(() -> PomHelper.setProjectParentVersion(any(), anyString()))
+                    .thenReturn(true);
             mojo.update(null);
         }
     }