You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2021/11/08 16:33:33 UTC

[maven] branch MNG-7129_Separate created (now 219d7e8)

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

gnodet pushed a change to branch MNG-7129_Separate
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at 219d7e8  Move caching in its own module

This branch includes the following new commits:

     new 219d7e8  Move caching in its own module

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven] 01/01: Move caching in its own module

Posted by gn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch MNG-7129_Separate
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 219d7e8446a8bc4dfc4cd0a8ace54bafc5bc8916
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Mon Nov 8 17:32:20 2021 +0100

    Move caching in its own module
---
 maven-caching/pom.xml                              | 104 ++++
 .../apache/maven/caching/ArtifactsRepository.java  |   0
 .../org/apache/maven/caching/CacheContext.java     |   0
 .../org/apache/maven/caching/CacheController.java  |   0
 .../apache/maven/caching/CacheControllerImpl.java  |   0
 .../java/org/apache/maven/caching/CacheDiff.java   |   0
 .../org/apache/maven/caching/CacheEventSpy.java    |   0
 .../java/org/apache/maven/caching/CacheResult.java |   0
 .../apache/maven/caching/CachingMojoExecutor.java  |  38 +-
 .../main/java/org/apache/maven/caching/Clock.java  |   0
 .../maven/caching/DefaultPluginScanConfig.java     |   0
 .../apache/maven/caching/HttpRepositoryImpl.java   |   0
 .../maven/caching/LocalArtifactsRepository.java    |   0
 .../apache/maven/caching/LocalRepositoryImpl.java  |   5 +-
 .../apache/maven/caching/MojoExecutionManager.java |   0
 .../maven/caching/MojoParametersListener.java      |   0
 .../org/apache/maven/caching/PluginScanConfig.java |   0
 .../apache/maven/caching/PluginScanConfigImpl.java |   0
 .../org/apache/maven/caching/ProjectUtils.java     |   0
 .../maven/caching/RemoteArtifactsRepository.java   |   0
 .../org/apache/maven/caching/RestoreStatus.java    |   0
 .../apache/maven/caching/ScanConfigProperties.java |   0
 .../java/org/apache/maven/caching/ZipUtils.java    |   0
 .../checksum/DependencyNotResolvedException.java   |   0
 .../apache/maven/caching/checksum/DigestUtils.java |   0
 .../apache/maven/caching/checksum/KeyUtils.java    |   0
 .../maven/caching/checksum/MavenProjectInput.java  |   0
 .../checksum/MultimoduleDiscoveryStrategy.java     |   0
 .../org/apache/maven/caching/checksum/WalkKey.java |   0
 .../apache/maven/caching/hash/CloseableBuffer.java |   0
 .../java/org/apache/maven/caching/hash/Hash.java   |   0
 .../apache/maven/caching/hash/HashAlgorithm.java   |   0
 .../apache/maven/caching/hash/HashChecksum.java    |   0
 .../org/apache/maven/caching/hash/HashFactory.java |   0
 .../org/apache/maven/caching/hash/HexUtils.java    |   0
 .../apache/maven/caching/hash/ReflectionUtils.java |   0
 .../java/org/apache/maven/caching/hash/SHA.java    |   0
 .../maven/caching/hash/ThreadLocalBuffer.java      |   0
 .../maven/caching/hash/ThreadLocalDigest.java      |   0
 .../java/org/apache/maven/caching/hash/XX.java     |   0
 .../java/org/apache/maven/caching/hash/XXMM.java   |   0
 .../maven/caching/xml/AllExternalSrategy.java      |   0
 .../org/apache/maven/caching/xml/BuildInfo.java    |   0
 .../org/apache/maven/caching/xml/CacheConfig.java  |   0
 .../apache/maven/caching/xml/CacheConfigImpl.java  |   0
 .../org/apache/maven/caching/xml/CacheSource.java  |   0
 .../org/apache/maven/caching/xml/CacheState.java   |   0
 .../org/apache/maven/caching/xml/DtoUtils.java     |   0
 .../maven/caching/xml/SentinelVersionStartegy.java |   0
 .../org/apache/maven/caching/xml/XmlService.java   |   0
 .../src/main/mdo/cache-config.mdo                  |  70 +--
 .../src/main/mdo/cache-diff.mdo                    |   0
 .../src/main/mdo/cache-domain.mdo                  |   0
 .../src/main/mdo/cache-report.mdo                  |   0
 .../org/apache/maven/caching/BuildInfoTest.java    |  22 +-
 .../caching/checksum/MavenProjectInputTest.java    |   8 +-
 .../apache/maven/caching/checksum/SHAHashTest.java |   4 +-
 .../apache/maven/caching/checksum/XXHashTest.java  |   6 +-
 .../apache/maven/caching/hash/HexUtilsTest.java    |   0
 .../apache/maven/caching/xml/CacheConfigTest.java  |   6 +-
 .../maven/caching/xml/cache-config-instance.xml    |   0
 .../maven/caching/xml/cache-domain-instance.xml    |   0
 maven-core/pom.xml                                 |  35 +-
 .../apache/maven/graph/DefaultGraphBuilder.java    | 117 +----
 ...{MojoExecutor.java => DefaultMojoExecutor.java} | 272 ++--------
 .../maven/lifecycle/internal/MojoExecutor.java     | 567 +--------------------
 .../lifecycle/internal/stub/MojoExecutorStub.java  |  11 +-
 pom.xml                                            |   1 +
 68 files changed, 229 insertions(+), 1037 deletions(-)

diff --git a/maven-caching/pom.xml b/maven-caching/pom.xml
new file mode 100644
index 0000000..f60d91f
--- /dev/null
+++ b/maven-caching/pom.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven</groupId>
+    <artifactId>maven</artifactId>
+    <version>3.8.3-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-caching</artifactId>
+
+  <name>Maven Caching</name>
+  <description>Maven Caching classes.</description>
+
+  <dependencies>
+    <!--  Maven -->
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <excludes combine.children="append">
+              <exclude>lifecycle-executor.txt</exclude>
+              <exclude>plugin-manager.txt</exclude>
+              <exclude>project-builder.txt</exclude>
+              <exclude>src/site/resources/design/**</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-component-metadata</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.eclipse.sisu</groupId>
+        <artifactId>sisu-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.modello</groupId>
+        <artifactId>modello-maven-plugin</artifactId>
+        <configuration>
+          <version>1.1.0</version>
+          <models>
+            <model>src/main/mdo/cache-config.mdo</model>
+            <model>src/main/mdo/cache-domain.mdo</model>
+            <model>src/main/mdo/cache-diff.mdo</model>
+            <model>src/main/mdo/cache-report.mdo</model>
+          </models>
+          <version>1.0.0</version>
+          <outputDirectory>${basedir}/target/generated-sources/modello</outputDirectory>
+        </configuration>
+        <executions>
+          <execution>
+            <id>modello-cache</id>
+            <goals>
+              <goal>java</goal>
+              <goal>xpp3-reader</goal>
+              <goal>xpp3-writer</goal>
+              <goal>xsd</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-core/src/main/java/org/apache/maven/caching/ArtifactsRepository.java b/maven-caching/src/main/java/org/apache/maven/caching/ArtifactsRepository.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/ArtifactsRepository.java
rename to maven-caching/src/main/java/org/apache/maven/caching/ArtifactsRepository.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheContext.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheContext.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheContext.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheContext.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheController.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheController.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheController.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheController.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheControllerImpl.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheControllerImpl.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheControllerImpl.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheControllerImpl.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheDiff.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheDiff.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheDiff.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheDiff.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheEventSpy.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheEventSpy.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheEventSpy.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheEventSpy.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/CacheResult.java b/maven-caching/src/main/java/org/apache/maven/caching/CacheResult.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/CacheResult.java
rename to maven-caching/src/main/java/org/apache/maven/caching/CacheResult.java
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-caching/src/main/java/org/apache/maven/caching/CachingMojoExecutor.java
similarity index 97%
copy from maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
copy to maven-caching/src/main/java/org/apache/maven/caching/CachingMojoExecutor.java
index 59f3849..4233565 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
+++ b/maven-caching/src/main/java/org/apache/maven/caching/CachingMojoExecutor.java
@@ -1,4 +1,4 @@
-package org.apache.maven.lifecycle.internal;
+package org.apache.maven.caching;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,13 +19,19 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
-import org.apache.maven.caching.CacheController;
-import org.apache.maven.caching.CacheResult;
-import org.apache.maven.caching.MojoExecutionManager;
-import org.apache.maven.caching.MojoParametersListener;
 import org.apache.maven.caching.xml.BuildInfo;
 import org.apache.maven.caching.xml.CacheConfig;
 import org.apache.maven.caching.xml.CacheState;
@@ -35,6 +41,14 @@ import org.apache.maven.execution.MojoExecutionEvent;
 import org.apache.maven.execution.MojoExecutionListener;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.MissingProjectException;
+import org.apache.maven.lifecycle.internal.DependencyContext;
+import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
+import org.apache.maven.lifecycle.internal.IDependencyContext;
+import org.apache.maven.lifecycle.internal.LifecycleDependencyResolver;
+import org.apache.maven.lifecycle.internal.MojoExecutor;
+import org.apache.maven.lifecycle.internal.NoResolutionContext;
+import org.apache.maven.lifecycle.internal.PhaseRecorder;
+import org.apache.maven.lifecycle.internal.ProjectIndex;
 import org.apache.maven.plugin.BuildPluginManager;
 import org.apache.maven.plugin.MavenPluginManager;
 import org.apache.maven.plugin.MojoExecution;
@@ -51,16 +65,6 @@ import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-
 import static org.apache.maven.caching.ProjectUtils.isLaterPhase;
 import static org.apache.maven.caching.checksum.KeyUtils.getVersionlessProjectKey;
 import static org.apache.maven.caching.xml.CacheState.DISABLED;
@@ -79,7 +83,7 @@ import static org.apache.maven.caching.xml.CacheState.INITIALIZED;
  * @since 3.0
  */
 @Component( role = MojoExecutor.class )
-public class MojoExecutor
+public class CachingMojoExecutor implements MojoExecutor
 {
 
     @Requirement
@@ -106,7 +110,7 @@ public class MojoExecutor
     @Requirement( role = MojoExecutionListener.class, hint = "MojoParametersListener" )
     private MojoParametersListener mojoListener;
 
-    public MojoExecutor()
+    public CachingMojoExecutor()
     {
     }
 
diff --git a/maven-core/src/main/java/org/apache/maven/caching/Clock.java b/maven-caching/src/main/java/org/apache/maven/caching/Clock.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/Clock.java
rename to maven-caching/src/main/java/org/apache/maven/caching/Clock.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/DefaultPluginScanConfig.java b/maven-caching/src/main/java/org/apache/maven/caching/DefaultPluginScanConfig.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/DefaultPluginScanConfig.java
rename to maven-caching/src/main/java/org/apache/maven/caching/DefaultPluginScanConfig.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/HttpRepositoryImpl.java b/maven-caching/src/main/java/org/apache/maven/caching/HttpRepositoryImpl.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/HttpRepositoryImpl.java
rename to maven-caching/src/main/java/org/apache/maven/caching/HttpRepositoryImpl.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/LocalArtifactsRepository.java b/maven-caching/src/main/java/org/apache/maven/caching/LocalArtifactsRepository.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/LocalArtifactsRepository.java
rename to maven-caching/src/main/java/org/apache/maven/caching/LocalArtifactsRepository.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java b/maven-caching/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java
similarity index 99%
rename from maven-core/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java
rename to maven-caching/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java
index 78d1d1a..b5f35df 100644
--- a/maven-core/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java
+++ b/maven-caching/src/main/java/org/apache/maven/caching/LocalRepositoryImpl.java
@@ -243,10 +243,11 @@ public class LocalRepositoryImpl implements LocalArtifactsRepository
                     cacheDirs.add( dir );
                 }
             }
-            if ( cacheDirs.size() > cacheConfig.getMaxLocalBuildsCached() )
+            int maxLocalBuildsCached = cacheConfig.getMaxLocalBuildsCached() - 1;
+            if ( cacheDirs.size() > maxLocalBuildsCached )
             {
                 Collections.sort( cacheDirs, LAST_MODIFIED_COMPARATOR );
-                for ( Path dir : cacheDirs.subList( 0, cacheDirs.size() - cacheConfig.getMaxLocalBuildsCached() ) )
+                for ( Path dir : cacheDirs.subList( 0, cacheDirs.size() - maxLocalBuildsCached ) )
                 {
                     FileUtils.deleteDirectory( dir.toFile() );
                 }
diff --git a/maven-core/src/main/java/org/apache/maven/caching/MojoExecutionManager.java b/maven-caching/src/main/java/org/apache/maven/caching/MojoExecutionManager.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/MojoExecutionManager.java
rename to maven-caching/src/main/java/org/apache/maven/caching/MojoExecutionManager.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/MojoParametersListener.java b/maven-caching/src/main/java/org/apache/maven/caching/MojoParametersListener.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/MojoParametersListener.java
rename to maven-caching/src/main/java/org/apache/maven/caching/MojoParametersListener.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/PluginScanConfig.java b/maven-caching/src/main/java/org/apache/maven/caching/PluginScanConfig.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/PluginScanConfig.java
rename to maven-caching/src/main/java/org/apache/maven/caching/PluginScanConfig.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/PluginScanConfigImpl.java b/maven-caching/src/main/java/org/apache/maven/caching/PluginScanConfigImpl.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/PluginScanConfigImpl.java
rename to maven-caching/src/main/java/org/apache/maven/caching/PluginScanConfigImpl.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/ProjectUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/ProjectUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/ProjectUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/ProjectUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/RemoteArtifactsRepository.java b/maven-caching/src/main/java/org/apache/maven/caching/RemoteArtifactsRepository.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/RemoteArtifactsRepository.java
rename to maven-caching/src/main/java/org/apache/maven/caching/RemoteArtifactsRepository.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/RestoreStatus.java b/maven-caching/src/main/java/org/apache/maven/caching/RestoreStatus.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/RestoreStatus.java
rename to maven-caching/src/main/java/org/apache/maven/caching/RestoreStatus.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/ScanConfigProperties.java b/maven-caching/src/main/java/org/apache/maven/caching/ScanConfigProperties.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/ScanConfigProperties.java
rename to maven-caching/src/main/java/org/apache/maven/caching/ScanConfigProperties.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/ZipUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/ZipUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/ZipUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/ZipUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/DependencyNotResolvedException.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/DependencyNotResolvedException.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/DependencyNotResolvedException.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/DependencyNotResolvedException.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/DigestUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/DigestUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/DigestUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/DigestUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/KeyUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/KeyUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/KeyUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/KeyUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/MavenProjectInput.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/MavenProjectInput.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/MavenProjectInput.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/MavenProjectInput.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/MultimoduleDiscoveryStrategy.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/MultimoduleDiscoveryStrategy.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/MultimoduleDiscoveryStrategy.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/MultimoduleDiscoveryStrategy.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/checksum/WalkKey.java b/maven-caching/src/main/java/org/apache/maven/caching/checksum/WalkKey.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/checksum/WalkKey.java
rename to maven-caching/src/main/java/org/apache/maven/caching/checksum/WalkKey.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/CloseableBuffer.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/CloseableBuffer.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/CloseableBuffer.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/CloseableBuffer.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/Hash.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/Hash.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/Hash.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/Hash.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/HashAlgorithm.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/HashAlgorithm.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/HashAlgorithm.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/HashAlgorithm.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/HashChecksum.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/HashChecksum.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/HashChecksum.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/HashChecksum.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/HashFactory.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/HashFactory.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/HashFactory.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/HashFactory.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/HexUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/HexUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/HexUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/HexUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/ReflectionUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/ReflectionUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/ReflectionUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/ReflectionUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/SHA.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/SHA.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/SHA.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/SHA.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/ThreadLocalBuffer.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/ThreadLocalBuffer.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/ThreadLocalBuffer.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/ThreadLocalBuffer.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/ThreadLocalDigest.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/ThreadLocalDigest.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/ThreadLocalDigest.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/ThreadLocalDigest.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/XX.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/XX.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/XX.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/XX.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/hash/XXMM.java b/maven-caching/src/main/java/org/apache/maven/caching/hash/XXMM.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/hash/XXMM.java
rename to maven-caching/src/main/java/org/apache/maven/caching/hash/XXMM.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/AllExternalSrategy.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/AllExternalSrategy.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/AllExternalSrategy.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/AllExternalSrategy.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/BuildInfo.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/BuildInfo.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/BuildInfo.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/BuildInfo.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/CacheConfig.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/CacheConfig.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/CacheConfig.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/CacheConfig.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/CacheConfigImpl.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/CacheConfigImpl.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/CacheConfigImpl.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/CacheConfigImpl.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/CacheSource.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/CacheSource.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/CacheSource.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/CacheSource.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/CacheState.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/CacheState.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/CacheState.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/CacheState.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/DtoUtils.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/DtoUtils.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/DtoUtils.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/DtoUtils.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/SentinelVersionStartegy.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/SentinelVersionStartegy.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/SentinelVersionStartegy.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/SentinelVersionStartegy.java
diff --git a/maven-core/src/main/java/org/apache/maven/caching/xml/XmlService.java b/maven-caching/src/main/java/org/apache/maven/caching/xml/XmlService.java
similarity index 100%
rename from maven-core/src/main/java/org/apache/maven/caching/xml/XmlService.java
rename to maven-caching/src/main/java/org/apache/maven/caching/xml/XmlService.java
diff --git a/maven-core/src/main/mdo/cache-config.mdo b/maven-caching/src/main/mdo/cache-config.mdo
similarity index 94%
rename from maven-core/src/main/mdo/cache-config.mdo
rename to maven-caching/src/main/mdo/cache-config.mdo
index 5160bb8..9d5f4bb 100644
--- a/maven-core/src/main/mdo/cache-config.mdo
+++ b/maven-caching/src/main/mdo/cache-config.mdo
@@ -34,48 +34,6 @@ under the License.
 
     <classes>
 
-        <!--
-        <xs:element name="cache" type="c:CacheType">
-            <xs:annotation>
-                <xs:documentation>
-                    Cached build metadata
-                </xs:documentation>
-            </xs:annotation>
-        </xs:element>
-
-        <xs:complexType name="CacheType">
-            <xs:sequence>
-                <xs:element name="configuration" type="c:ConfigurationType">
-                    <xs:annotation>
-                        <xs:documentation>
-                            Configuration of major cache properties
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:element>
-                <xs:element name="input" type="c:InputType">
-                    <xs:annotation>
-                        <xs:documentation>
-                            Configuration for source code input files participating in checksum calculation
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:element>
-                <xs:element name="output" type="c:OutputType" minOccurs="0">
-                    <xs:annotation>
-                        <xs:documentation>
-                            Configuration for output artifacts, it's needed if you want to explicitly include/exclude something from caching
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:element>
-                <xs:element name="executionControl" type="c:ExecutionControlType" minOccurs="0">
-                    <xs:annotation>
-                        <xs:documentation>
-                            Execution rules for plugins in cached mode. Defines which plugins should run always
-                        </xs:documentation>
-                    </xs:annotation>
-                </xs:element>
-            </xs:sequence>
-        </xs:complexType>
-        -->
         <class rootElement="true" xml.tagName="cache">
             <name>CacheType</name>
             <fields>
@@ -84,56 +42,40 @@ under the License.
                     <association>
                         <type>ConfigurationType</type>
                     </association>
+                    <description>Configuration of main cache properties</description>
                 </field>
                 <field>
                     <name>input</name>
                     <association>
                         <type>InputType</type>
                     </association>
+                    <description>Configuration for source code input files participating in checksum calculation</description>
                 </field>
                 <field>
                     <name>output</name>
                     <association>
                         <type>OutputType</type>
                     </association>
+                    <description>Configuration for output artifacts, it's needed if you want to explicitly include/exclude something from caching</description>
                 </field>
                 <field>
                     <name>executionControl</name>
                     <association>
                         <type>ExecutionControlType</type>
                     </association>
+                    <description>Execution rules for plugins in cached mode. Defines which plugins should run always</description>
                 </field>
             </fields>
+            <description>Cache build metadata</description>
         </class>
 
-        <!--
-                    <xs:complexType>
-                        <xs:sequence>
-                            <xs:element name="url" type="xs:string" minOccurs="0">
-                                <xs:annotation>
-                                    <xs:documentation>
-                                        address of remote cache
-                                    </xs:documentation>
-                                </xs:annotation>
-                            </xs:element>
-                        </xs:sequence>
-                        <xs:attribute name="enabled" type="xs:boolean" default="true"/>
-                        <xs:attribute name="saveToRemote" type="xs:boolean" default="false">
-                            <xs:annotation>
-                                <xs:documentation>
-                                    Save output to remote cache. Recommended to enable on CI agents only.
-                                </xs:documentation>
-                            </xs:annotation>
-                        </xs:attribute>
-                    </xs:complexType>
-          -->
         <class>
             <name>Remote</name>
             <fields>
                 <field>
                     <name>url</name>
                     <type>String</type>
-                    <description>address of remote cache</description>
+                    <description>Address of remote cache</description>
                 </field>
                 <field xml.attribute="true">
                     <name>enabled</name>
diff --git a/maven-core/src/main/mdo/cache-diff.mdo b/maven-caching/src/main/mdo/cache-diff.mdo
similarity index 100%
rename from maven-core/src/main/mdo/cache-diff.mdo
rename to maven-caching/src/main/mdo/cache-diff.mdo
diff --git a/maven-core/src/main/mdo/cache-domain.mdo b/maven-caching/src/main/mdo/cache-domain.mdo
similarity index 100%
rename from maven-core/src/main/mdo/cache-domain.mdo
rename to maven-caching/src/main/mdo/cache-domain.mdo
diff --git a/maven-core/src/main/mdo/cache-report.mdo b/maven-caching/src/main/mdo/cache-report.mdo
similarity index 100%
rename from maven-core/src/main/mdo/cache-report.mdo
rename to maven-caching/src/main/mdo/cache-report.mdo
diff --git a/maven-core/src/test/java/org/apache/maven/caching/BuildInfoTest.java b/maven-caching/src/test/java/org/apache/maven/caching/BuildInfoTest.java
similarity index 99%
rename from maven-core/src/test/java/org/apache/maven/caching/BuildInfoTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/BuildInfoTest.java
index 19c1de4..1ebec79 100644
--- a/maven-core/src/test/java/org/apache/maven/caching/BuildInfoTest.java
+++ b/maven-caching/src/test/java/org/apache/maven/caching/BuildInfoTest.java
@@ -20,31 +20,31 @@ package org.apache.maven.caching;
  */
 
 
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
 import com.google.common.collect.Lists;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.apache.maven.caching.hash.HashFactory;
 import org.apache.maven.caching.domain.ArtifactType;
 import org.apache.maven.caching.domain.BuildInfoType;
 import org.apache.maven.caching.domain.CompletedExecutionType;
 import org.apache.maven.caching.domain.DigestItemType;
 import org.apache.maven.caching.domain.ProjectsInputInfoType;
 import org.apache.maven.caching.domain.PropertyValueType;
+import org.apache.maven.caching.hash.HashFactory;
 import org.apache.maven.caching.xml.BuildInfo;
 import org.apache.maven.caching.xml.XmlService;
 import org.junit.Test;
 
-import java.io.File;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
 public class BuildInfoTest {
 
     @Test
diff --git a/maven-core/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java b/maven-caching/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java
similarity index 100%
rename from maven-core/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java
index d420134..1981919 100644
--- a/maven-core/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java
+++ b/maven-caching/src/test/java/org/apache/maven/caching/checksum/MavenProjectInputTest.java
@@ -19,15 +19,15 @@ package org.apache.maven.caching.checksum;
  * under the License.
  */
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
 import static org.junit.Assert.assertEquals;
 
 public class MavenProjectInputTest {
diff --git a/maven-core/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java b/maven-caching/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java
similarity index 100%
rename from maven-core/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java
index 9cf5bb4..c3782e1 100644
--- a/maven-core/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java
+++ b/maven-caching/src/test/java/org/apache/maven/caching/checksum/SHAHashTest.java
@@ -19,12 +19,12 @@ package org.apache.maven.caching.checksum;
  * under the License.
  */
 
+import java.nio.charset.StandardCharsets;
+
 import org.apache.maven.caching.hash.HashAlgorithm;
 import org.apache.maven.caching.hash.HashChecksum;
 import org.junit.Test;
 
-import java.nio.charset.StandardCharsets;
-
 import static org.apache.maven.caching.hash.HashFactory.SHA256;
 import static org.junit.Assert.assertEquals;
 
diff --git a/maven-core/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java b/maven-caching/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java
similarity index 100%
rename from maven-core/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java
index 3a1a46e..164f2b2 100644
--- a/maven-core/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java
+++ b/maven-caching/src/test/java/org/apache/maven/caching/checksum/XXHashTest.java
@@ -19,13 +19,13 @@ package org.apache.maven.caching.checksum;
  * under the License.
  */
 
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+
 import org.apache.maven.caching.hash.HashAlgorithm;
 import org.apache.maven.caching.hash.HashChecksum;
 import org.junit.Test;
 
-import java.nio.ByteBuffer;
-import java.nio.charset.StandardCharsets;
-
 import static org.apache.maven.caching.hash.HashFactory.XX;
 import static org.apache.maven.caching.hash.HashFactory.XXMM;
 import static org.junit.Assert.assertEquals;
diff --git a/maven-core/src/test/java/org/apache/maven/caching/hash/HexUtilsTest.java b/maven-caching/src/test/java/org/apache/maven/caching/hash/HexUtilsTest.java
similarity index 100%
rename from maven-core/src/test/java/org/apache/maven/caching/hash/HexUtilsTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/hash/HexUtilsTest.java
diff --git a/maven-core/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java b/maven-caching/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java
similarity index 95%
rename from maven-core/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java
rename to maven-caching/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java
index c589181..1399f2a 100644
--- a/maven-core/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java
+++ b/maven-caching/src/test/java/org/apache/maven/caching/xml/CacheConfigTest.java
@@ -19,13 +19,11 @@ package org.apache.maven.caching.xml;
  * under the License.
  */
 
+import java.io.InputStream;
+
 import org.apache.maven.caching.domain.CacheType;
 import org.junit.Test;
 
-import java.io.InputStream;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
 public class CacheConfigTest {
 
     @Test
diff --git a/maven-core/src/test/resources/org/apache/maven/caching/xml/cache-config-instance.xml b/maven-caching/src/test/resources/org/apache/maven/caching/xml/cache-config-instance.xml
similarity index 100%
rename from maven-core/src/test/resources/org/apache/maven/caching/xml/cache-config-instance.xml
rename to maven-caching/src/test/resources/org/apache/maven/caching/xml/cache-config-instance.xml
diff --git a/maven-core/src/test/resources/org/apache/maven/caching/xml/cache-domain-instance.xml b/maven-caching/src/test/resources/org/apache/maven/caching/xml/cache-domain-instance.xml
similarity index 100%
rename from maven-core/src/test/resources/org/apache/maven/caching/xml/cache-domain-instance.xml
rename to maven-caching/src/test/resources/org/apache/maven/caching/xml/cache-domain-instance.xml
diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index c3c3c7c..80a90aa 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -205,40 +205,7 @@ under the License.
           </models>
         </configuration>
         <executions>
-          <execution>
-            <id>modello-site-docs-cache</id>
-            <phase>pre-site</phase>
-            <goals>
-              <goal>xdoc</goal>
-              <goal>xsd</goal>
-            </goals>
-            <configuration>
-              <version>1.0.0</version>
-              <models>
-                <model>src/main/mdo/cache-domain.mdo</model>
-              </models>
-            </configuration>
-          </execution>
-          <execution>
-            <id>modello-cache</id>
-            <goals>
-              <goal>java</goal>
-              <goal>xpp3-reader</goal>
-              <goal>xpp3-writer</goal>
-              <goal>xsd</goal>
-            </goals>
-            <configuration>
-              <version>1.0.0</version>
-              <models>
-                <model>src/main/mdo/cache-config.mdo</model>
-                <model>src/main/mdo/cache-domain.mdo</model>
-                <model>src/main/mdo/cache-diff.mdo</model>
-                <model>src/main/mdo/cache-report.mdo</model>
-              </models>
-              <outputDirectory>${basedir}/target/generated-sources/modello</outputDirectory>
-            </configuration>
-          </execution>
-          <execution>
+         <execution>
             <id>modello-site-docs-extension</id>
             <phase>pre-site</phase>
             <goals>
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
index 5a7db54..866f36e 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -34,11 +34,9 @@ import org.apache.maven.DefaultMaven;
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.ProjectCycleException;
 import org.apache.maven.artifact.ArtifactUtils;
-import org.apache.maven.caching.checksum.KeyUtils;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.ProjectDependencyGraph;
-import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.building.DefaultModelProblem;
 import org.apache.maven.model.building.ModelProblem;
@@ -58,18 +56,14 @@ import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.dag.CycleDetectedException;
 
-import static org.apache.maven.artifact.versioning.VersionRange.createFromVersion;
-
 /**
  * Builds the {@link ProjectDependencyGraph inter-dependencies graph} between projects in the reactor.
  */
 @Component( role = GraphBuilder.class, hint = GraphBuilder.HINT )
 public class DefaultGraphBuilder
-    implements GraphBuilder
+        implements GraphBuilder
 {
 
-    public static final String PROJECT_VERSION_PROP_NAME = "org.maven.project.version";
-
     @Requirement
     private Logger logger;
 
@@ -87,11 +81,6 @@ public class DefaultGraphBuilder
             {
                 final List<MavenProject> projects = getProjectsForMavenReactor( session );
                 validateProjects( projects );
-
-                if ( System.getProperties().containsKey( PROJECT_VERSION_PROP_NAME ) )
-                {
-                    overrideReactorVersions( projects, session );
-                }
                 result = reactorDependencyGraph( session, projects );
             }
 
@@ -111,77 +100,15 @@ public class DefaultGraphBuilder
         }
     }
 
-    private void overrideReactorVersions( List<MavenProject> projects, MavenSession session )
-    {
-        String injectedVersion = System.getProperty( PROJECT_VERSION_PROP_NAME );
-        logger.info( "Overriding reactor projects version to " + injectedVersion );
-
-        Map<String, String> reactorProjects = new HashMap<>( projects.size() );
-
-        for ( MavenProject project : projects )
-        {
-            String projectKey = KeyUtils.getVersionlessProjectKey( project );
-            logger.debug(
-                    "[" + projectKey + "] Overriding version from " + project.getVersion() + " to " + injectedVersion );
-            reactorProjects.put( projectKey, project.getVersion() );
-            project.setVersion( injectedVersion );
-            project.getArtifact().setVersionRange( createFromVersion( injectedVersion ) );
-            project.getArtifact().updateVersion( injectedVersion, session.getLocalRepository() );
-        }
-
-        for ( MavenProject project : projects )
-        {
-            String projectKey = KeyUtils.getVersionlessProjectKey( project );
-            MavenProject parent = project.getParent();
-            String parentKey = KeyUtils.getVersionlessProjectKey( parent );
-            String overriddenParentVersion = reactorProjects.get( parentKey );
-            if ( overriddenParentVersion != null && overriddenParentVersion.equals(
-                    project.getParentArtifact().getVersion() ) )
-            {
-                logger.debug(
-                        "[" + projectKey + "] Parent " + parentKey + " overriding artefact version from "
-                                + parent.getVersion() + " to " + injectedVersion );
-                project.getParentArtifact().setVersionRange( createFromVersion( injectedVersion ) );
-                project.getParentArtifact().updateVersion( injectedVersion, session.getLocalRepository() );
-            }
-
-            for ( Dependency dependency : project.getDependencies() )
-            {
-                String dependencyKey = KeyUtils.getVersionlessDependencyKey( dependency );
-                String overriddenReactorVersion = reactorProjects.get( dependencyKey );
-                if ( overriddenReactorVersion != null && overriddenReactorVersion.equals( dependency.getVersion() ) )
-                {
-                    logger.debug(
-                            "[" + projectKey + "] Dependency " + dependencyKey + " overriding version from "
-                                    + dependency.getVersion() + " to " + injectedVersion );
-                    dependency.setVersion( injectedVersion );
-                }
-            }
-
-            for ( Dependency dependency : project.getDependencyManagement().getDependencies() )
-            {
-                String dependencyKey = KeyUtils.getVersionlessDependencyKey( dependency );
-                String overriddenReactorVersion = reactorProjects.get( dependencyKey );
-                if ( overriddenReactorVersion != null && overriddenReactorVersion.equals( dependency.getVersion() ) )
-                {
-                    logger.debug(
-                            "[" + projectKey + "] Dependency management " + dependencyKey
-                                   + " overriding version from " + dependency.getVersion() + " to " + injectedVersion );
-                    dependency.setVersion( injectedVersion );
-                }
-            }
-        }
-    }
-
     private Result<ProjectDependencyGraph> sessionDependencyGraph( final MavenSession session )
-        throws CycleDetectedException, DuplicateProjectException
+            throws CycleDetectedException, DuplicateProjectException
     {
         Result<ProjectDependencyGraph> result = null;
 
         if ( session.getProjectDependencyGraph() != null || session.getProjects() != null )
         {
             final ProjectDependencyGraph graph =
-                new DefaultProjectDependencyGraph( session.getAllProjects(), session.getProjects() );
+                    new DefaultProjectDependencyGraph( session.getAllProjects(), session.getProjects() );
 
             result = Result.success( graph );
         }
@@ -190,7 +117,7 @@ public class DefaultGraphBuilder
     }
 
     private Result<ProjectDependencyGraph> reactorDependencyGraph( MavenSession session, List<MavenProject> projects )
-        throws CycleDetectedException, DuplicateProjectException, MavenExecutionException
+            throws CycleDetectedException, DuplicateProjectException, MavenExecutionException
     {
         ProjectDependencyGraph projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
         List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
@@ -208,7 +135,7 @@ public class DefaultGraphBuilder
 
     private List<MavenProject> trimSelectedProjects( List<MavenProject> projects, ProjectDependencyGraph graph,
                                                      MavenExecutionRequest request )
-        throws MavenExecutionException
+            throws MavenExecutionException
     {
         List<MavenProject> result = projects;
 
@@ -242,7 +169,7 @@ public class DefaultGraphBuilder
                 else
                 {
                     throw new MavenExecutionException( "Could not find the selected project in the reactor: "
-                        + selector, request.getPom() );
+                            + selector, request.getPom() );
                 }
             }
 
@@ -265,7 +192,7 @@ public class DefaultGraphBuilder
             else if ( StringUtils.isNotEmpty( request.getMakeBehavior() ) )
             {
                 throw new MavenExecutionException( "Invalid reactor make behavior: " + request.getMakeBehavior(),
-                                                   request.getPom() );
+                        request.getPom() );
             }
 
             if ( makeUpstream || makeDownstream )
@@ -298,7 +225,7 @@ public class DefaultGraphBuilder
     }
 
     private List<MavenProject> trimExcludedProjects( List<MavenProject> projects, MavenExecutionRequest request )
-        throws MavenExecutionException
+            throws MavenExecutionException
     {
         List<MavenProject> result = projects;
 
@@ -333,7 +260,7 @@ public class DefaultGraphBuilder
                 else
                 {
                     throw new MavenExecutionException( "Could not find the selected project in the reactor: "
-                        + selector, request.getPom() );
+                            + selector, request.getPom() );
                 }
             }
 
@@ -351,7 +278,7 @@ public class DefaultGraphBuilder
     }
 
     private List<MavenProject> trimResumedProjects( List<MavenProject> projects, MavenExecutionRequest request )
-        throws MavenExecutionException
+            throws MavenExecutionException
     {
         List<MavenProject> result = projects;
 
@@ -385,7 +312,7 @@ public class DefaultGraphBuilder
             if ( !resumed )
             {
                 throw new MavenExecutionException( "Could not find project to resume reactor build from: " + selector
-                    + " vs " + formatProjects( projects ), request.getPom() );
+                        + " vs " + formatProjects( projects ), request.getPom() );
             }
         }
 
@@ -453,7 +380,7 @@ public class DefaultGraphBuilder
     // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     private List<MavenProject> getProjectsForMavenReactor( MavenSession session )
-        throws ProjectBuildingException
+            throws ProjectBuildingException
     {
         MavenExecutionRequest request = session.getRequest();
 
@@ -467,7 +394,7 @@ public class DefaultGraphBuilder
         {
             ModelSource modelSource = new UrlModelSource( DefaultMaven.class.getResource( "project/standalone.xml" ) );
             MavenProject project = projectBuilder.build( modelSource, request.getProjectBuildingRequest() )
-                .getProject();
+                    .getProject();
             project.setExecutionRoot( true );
             projects.add( project );
             request.setProjectPresent( false );
@@ -480,12 +407,12 @@ public class DefaultGraphBuilder
     }
 
     private void collectProjects( List<MavenProject> projects, List<File> files, MavenExecutionRequest request )
-        throws ProjectBuildingException
+            throws ProjectBuildingException
     {
         ProjectBuildingRequest projectBuildingRequest = request.getProjectBuildingRequest();
 
         List<ProjectBuildingResult> results = projectBuilder.build( files, request.isRecursive(),
-                                                                    projectBuildingRequest );
+                projectBuildingRequest );
 
         boolean problems = false;
 
@@ -497,7 +424,7 @@ public class DefaultGraphBuilder
             {
                 logger.warn( "" );
                 logger.warn( "Some problems were encountered while building the effective model for "
-                    + result.getProject().getId() );
+                        + result.getProject().getId() );
 
                 for ( ModelProblem problem : result.getProblems() )
                 {
@@ -513,10 +440,10 @@ public class DefaultGraphBuilder
         {
             logger.warn( "" );
             logger.warn( "It is highly recommended to fix these problems"
-                + " because they threaten the stability of your build." );
+                    + " because they threaten the stability of your build." );
             logger.warn( "" );
             logger.warn( "For this reason, future Maven versions might no"
-                + " longer support building such malformed projects." );
+                    + " longer support building such malformed projects." );
             logger.warn( "" );
         }
     }
@@ -540,17 +467,17 @@ public class DefaultGraphBuilder
                 if ( plugin.isExtensions() )
                 {
                     String pluginKey = ArtifactUtils.key( plugin.getGroupId(), plugin.getArtifactId(),
-                                                          plugin.getVersion() );
+                            plugin.getVersion() );
 
                     if ( projectsMap.containsKey( pluginKey ) )
                     {
                         logger.warn( project.getName() + " uses " + plugin.getKey()
-                            + " as extensions, which is not possible within the same reactor build. "
-                            + "This plugin was pulled from the local repository!" );
+                                + " as extensions, which is not possible within the same reactor build. "
+                                + "This plugin was pulled from the local repository!" );
                     }
                 }
             }
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutor.java
similarity index 58%
copy from maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
copy to maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutor.java
index 59f3849..16af887 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutor.java
@@ -19,26 +19,25 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
-import org.apache.maven.caching.CacheController;
-import org.apache.maven.caching.CacheResult;
-import org.apache.maven.caching.MojoExecutionManager;
-import org.apache.maven.caching.MojoParametersListener;
-import org.apache.maven.caching.xml.BuildInfo;
-import org.apache.maven.caching.xml.CacheConfig;
-import org.apache.maven.caching.xml.CacheState;
 import org.apache.maven.execution.ExecutionEvent;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.execution.MojoExecutionEvent;
-import org.apache.maven.execution.MojoExecutionListener;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 import org.apache.maven.lifecycle.MissingProjectException;
 import org.apache.maven.plugin.BuildPluginManager;
 import org.apache.maven.plugin.MavenPluginManager;
 import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.plugin.MojoExecution.Source;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.PluginConfigurationException;
@@ -48,25 +47,8 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import static org.apache.maven.caching.ProjectUtils.isLaterPhase;
-import static org.apache.maven.caching.checksum.KeyUtils.getVersionlessProjectKey;
-import static org.apache.maven.caching.xml.CacheState.DISABLED;
-import static org.apache.maven.caching.xml.CacheState.INITIALIZED;
-
-
 /**
  * <p>
  * Executes an individual mojo
@@ -79,13 +61,10 @@ import static org.apache.maven.caching.xml.CacheState.INITIALIZED;
  * @since 3.0
  */
 @Component( role = MojoExecutor.class )
-public class MojoExecutor
+public class DefaultMojoExecutor implements MojoExecutor
 {
 
     @Requirement
-    private Logger logger;
-
-    @Requirement
     private BuildPluginManager pluginManager;
 
     @Requirement
@@ -97,16 +76,7 @@ public class MojoExecutor
     @Requirement
     private ExecutionEventCatapult eventCatapult;
 
-    @Requirement
-    private CacheController cacheController;
-
-    @Requirement
-    private CacheConfig cacheConfig;
-
-    @Requirement( role = MojoExecutionListener.class, hint = "MojoParametersListener" )
-    private MojoParametersListener mojoListener;
-
-    public MojoExecutor()
+    public DefaultMojoExecutor()
     {
     }
 
@@ -167,207 +137,29 @@ public class MojoExecutor
 
     public void execute( MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex )
             throws LifecycleExecutionException
+
     {
         DependencyContext dependencyContext = newDependencyContext( session, mojoExecutions );
 
         PhaseRecorder phaseRecorder = new PhaseRecorder( session.getCurrentProject() );
 
-        final MavenProject project = session.getCurrentProject();
-        final Source source = getSource( mojoExecutions );
-
-        // execute clean bound goals before restoring to not interfere/slowdown clean
-        CacheState cacheState = DISABLED;
-        CacheResult result = CacheResult.empty();
-        if ( source == Source.LIFECYCLE )
-        {
-            List<MojoExecution> cleanPhase = getCleanPhase( mojoExecutions );
-            for ( MojoExecution mojoExecution : cleanPhase )
-            {
-                execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-            }
-            cacheState = cacheConfig.initialize( project, session );
-            if ( cacheState == INITIALIZED )
-            {
-                result = cacheController.findCachedBuild( session, project, projectIndex, mojoExecutions );
-            }
-        }
-
-        boolean restorable = result.isSuccess() || result.isPartialSuccess();
-        boolean restored = result.isSuccess(); // if partially restored need to save increment
-        if ( restorable )
-        {
-            restored &= restoreProject( result, mojoExecutions, projectIndex, dependencyContext, phaseRecorder );
-        }
-        else
-        {
-            for ( MojoExecution mojoExecution : mojoExecutions )
-            {
-                if ( source == Source.CLI || isLaterPhase( mojoExecution.getLifecyclePhase(), "post-clean" ) )
-                {
-                    execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-                }
-            }
-        }
-
-        if ( cacheState == INITIALIZED && ( !restorable || !restored ) )
-        {
-            final Map<String, MojoExecutionEvent> executionEvents = mojoListener.getProjectExecutions( project );
-            cacheController.save( result, mojoExecutions, executionEvents );
-        }
-
-        if ( cacheConfig.isFailFast() && !result.isSuccess() )
-        {
-            throw new LifecycleExecutionException(
-                    "Failed to restore project[" + getVersionlessProjectKey( project ) + "] from cache, failing build.",
-                    project );
-        }
-    }
-
-    private Source getSource( List<MojoExecution> mojoExecutions )
-    {
-        if ( mojoExecutions == null || mojoExecutions.isEmpty() )
-        {
-            return null;
-        }
         for ( MojoExecution mojoExecution : mojoExecutions )
         {
-            if ( mojoExecution.getSource() == Source.CLI )
-            {
-                return Source.CLI;
-            }
-        }
-        return Source.LIFECYCLE;
-    }
-
-    private boolean restoreProject( CacheResult cacheResult,
-                                    List<MojoExecution> mojoExecutions,
-                                    ProjectIndex projectIndex,
-                                    DependencyContext dependencyContext,
-                                    PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
-    {
-
-        final BuildInfo buildInfo = cacheResult.getBuildInfo();
-        final MavenProject project = cacheResult.getContext().getProject();
-        final MavenSession session = cacheResult.getContext().getSession();
-        final List<MojoExecution> cachedSegment = buildInfo.getCachedSegment( mojoExecutions );
-
-        boolean restored = cacheController.restoreProjectArtifacts( cacheResult );
-        if ( !restored )
-        {
-            logger.info(
-                    "[CACHE][" + project.getArtifactId()
-                            + "] Cannot restore project artifacts, continuing with non cached build" );
-            return false;
-        }
-
-        for ( MojoExecution cacheCandidate : cachedSegment )
-        {
-
-            if ( cacheController.isForcedExecution( project, cacheCandidate ) )
-            {
-                logger.info(
-                        "[CACHE][" + project.getArtifactId() + "] Mojo execution is forced by project property: "
-                                + cacheCandidate.getMojoDescriptor().getFullGoalName() );
-                execute( session, cacheCandidate, projectIndex, dependencyContext, phaseRecorder );
-            }
-            else
-            {
-                restored = verifyCacheConsistency( cacheCandidate, buildInfo, project, session, projectIndex,
-                        dependencyContext, phaseRecorder );
-                if ( !restored )
-                {
-                    break;
-                }
-            }
-        }
-
-        if ( !restored )
-        {
-            // cleanup partial state
-            project.getArtifact().setFile( null );
-            project.getArtifact().setResolved( false );
-            project.getAttachedArtifacts().clear();
-            mojoListener.remove( project );
-            // build as usual
-            for ( MojoExecution mojoExecution : cachedSegment )
-            {
-                execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-            }
-        }
-
-        for ( MojoExecution mojoExecution : buildInfo.getPostCachedSegment( mojoExecutions ) )
-        {
             execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
         }
-        return restored;
     }
 
-    private boolean verifyCacheConsistency( MojoExecution cacheCandidate,
-                                            BuildInfo cachedBuildInfo,
-                                            MavenProject project,
-                                            MavenSession session,
-                                            ProjectIndex projectIndex,
-                                            DependencyContext dependencyContext,
-                                            PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
-    {
-
-        AtomicBoolean consistent = new AtomicBoolean( true );
-        final MojoExecutionManager mojoChecker = new MojoExecutionManager( project, cacheController, cachedBuildInfo,
-                consistent, logger, cacheConfig );
-
-        if ( mojoChecker.needCheck( cacheCandidate, session ) )
-        {
-            try
-            {
-                // actual execution will not happen (if not forced). decision delayed to execution time
-                // then all properties are resolved.
-                cacheCandidate.setMojoExecutionManager( mojoChecker );
-                IDependencyContext nop = new NoResolutionContext( dependencyContext );
-                execute( session, cacheCandidate, projectIndex, nop, phaseRecorder );
-            }
-            finally
-            {
-                cacheCandidate.setMojoExecutionManager( null );
-            }
-        }
-        else
-        {
-            logger.info(
-                    "[CACHE][" + project.getArtifactId() + "] Skipping plugin execution (cached): "
-                            + cacheCandidate.getMojoDescriptor().getFullGoalName() );
-        }
-
-        return consistent.get();
-    }
-
-    private List<MojoExecution> getCleanPhase( List<MojoExecution> mojoExecutions )
-    {
-        List<MojoExecution> list = new ArrayList<>();
-        for ( MojoExecution mojoExecution : mojoExecutions )
-        {
-            if ( isLaterPhase( mojoExecution.getLifecyclePhase(), "post-clean" ) )
-            {
-                break;
-            }
-            list.add( mojoExecution );
-        }
-        return list;
-    }
-
-    public void execute( MavenSession session,
-                         MojoExecution mojoExecution,
-                         ProjectIndex projectIndex,
-                         IDependencyContext dependencyContext,
-                         PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
+    public void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+                         DependencyContext dependencyContext, PhaseRecorder phaseRecorder )
+            throws LifecycleExecutionException
     {
         execute( session, mojoExecution, projectIndex, dependencyContext );
         phaseRecorder.observeExecution( mojoExecution );
     }
 
-    private void execute( MavenSession session,
-                          MojoExecution mojoExecution,
-                          ProjectIndex projectIndex,
-                          IDependencyContext dependencyContext ) throws LifecycleExecutionException
+    private void execute( MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
+                          DependencyContext dependencyContext )
+            throws LifecycleExecutionException
     {
         MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
 
@@ -391,7 +183,7 @@ public class MojoExecutor
 
         if ( mojoDescriptor.isOnlineRequired() && session.isOffline() )
         {
-            if ( Source.CLI.equals( mojoExecution.getSource() ) )
+            if ( MojoExecution.Source.CLI.equals( mojoExecution.getSource() ) )
             {
                 Throwable cause = new IllegalStateException(
                         "Goal requires online mode for execution" + " but Maven is currently offline." );
@@ -417,9 +209,7 @@ public class MojoExecutor
             {
                 pluginManager.executeMojo( session, mojoExecution );
             }
-            catch ( MojoFailureException
-                    | PluginManagerException
-                    | PluginConfigurationException
+            catch ( MojoFailureException | PluginManagerException | PluginConfigurationException
                     | MojoExecutionException e )
             {
                 throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
@@ -442,9 +232,9 @@ public class MojoExecutor
         }
     }
 
-    public void ensureDependenciesAreResolved( MojoDescriptor mojoDescriptor,
-                                               MavenSession session,
-                                               IDependencyContext dependencyContext ) throws LifecycleExecutionException
+    public void ensureDependenciesAreResolved( MojoDescriptor mojoDescriptor, MavenSession session,
+                                               DependencyContext dependencyContext )
+            throws LifecycleExecutionException
 
     {
         MavenProject project = dependencyContext.getProject();
@@ -473,15 +263,17 @@ public class MojoExecutor
                     if ( aggregatedProject != project )
                     {
                         lifeCycleDependencyResolver.resolveProjectDependencies( aggregatedProject, scopesToCollect,
-                                scopesToResolve, session, aggregating, Collections.<Artifact>emptySet() );
+                                scopesToResolve, session, aggregating,
+                                Collections.<Artifact>emptySet() );
                     }
                 }
             }
         }
 
         ArtifactFilter artifactFilter = getArtifactFilter( mojoDescriptor );
-        List<MavenProject> projectsToResolve = LifecycleDependencyResolver.getProjects( session.getCurrentProject(),
-                session, mojoDescriptor.isAggregator() );
+        List<MavenProject> projectsToResolve =
+                LifecycleDependencyResolver.getProjects( session.getCurrentProject(), session,
+                        mojoDescriptor.isAggregator() );
         for ( MavenProject projectToResolve : projectsToResolve )
         {
             projectToResolve.setArtifactFilter( artifactFilter );
@@ -513,9 +305,9 @@ public class MojoExecutor
         }
     }
 
-    public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution,
-                                                       MavenSession session,
-                                                       ProjectIndex projectIndex ) throws LifecycleExecutionException
+    public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session,
+                                                       ProjectIndex projectIndex )
+            throws LifecycleExecutionException
     {
         List<MavenProject> forkedProjects = Collections.emptyList();
 
@@ -590,4 +382,4 @@ public class MojoExecutor
 
         return forkedProjects;
     }
-}
+}
\ No newline at end of file
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
index 59f3849..78aaedd 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
@@ -19,575 +19,26 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-import org.apache.maven.artifact.resolver.filter.CumulativeScopeArtifactFilter;
-import org.apache.maven.caching.CacheController;
-import org.apache.maven.caching.CacheResult;
-import org.apache.maven.caching.MojoExecutionManager;
-import org.apache.maven.caching.MojoParametersListener;
-import org.apache.maven.caching.xml.BuildInfo;
-import org.apache.maven.caching.xml.CacheConfig;
-import org.apache.maven.caching.xml.CacheState;
-import org.apache.maven.execution.ExecutionEvent;
+import java.util.List;
+
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.execution.MojoExecutionEvent;
-import org.apache.maven.execution.MojoExecutionListener;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
-import org.apache.maven.lifecycle.MissingProjectException;
-import org.apache.maven.plugin.BuildPluginManager;
-import org.apache.maven.plugin.MavenPluginManager;
 import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.plugin.MojoExecution.Source;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugin.PluginConfigurationException;
-import org.apache.maven.plugin.PluginIncompatibleException;
-import org.apache.maven.plugin.PluginManagerException;
-import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import static org.apache.maven.caching.ProjectUtils.isLaterPhase;
-import static org.apache.maven.caching.checksum.KeyUtils.getVersionlessProjectKey;
-import static org.apache.maven.caching.xml.CacheState.DISABLED;
-import static org.apache.maven.caching.xml.CacheState.INITIALIZED;
-
 
 /**
  * <p>
  * Executes an individual mojo
  * </p>
- * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
- *
- * @author Jason van Zyl
- * @author Benjamin Bentmann
- * @author Kristian Rosenvold
- * @since 3.0
  */
-@Component( role = MojoExecutor.class )
-public class MojoExecutor
+public interface MojoExecutor
 {
 
-    @Requirement
-    private Logger logger;
-
-    @Requirement
-    private BuildPluginManager pluginManager;
-
-    @Requirement
-    private MavenPluginManager mavenPluginManager;
-
-    @Requirement
-    private LifecycleDependencyResolver lifeCycleDependencyResolver;
-
-    @Requirement
-    private ExecutionEventCatapult eventCatapult;
-
-    @Requirement
-    private CacheController cacheController;
-
-    @Requirement
-    private CacheConfig cacheConfig;
-
-    @Requirement( role = MojoExecutionListener.class, hint = "MojoParametersListener" )
-    private MojoParametersListener mojoListener;
-
-    public MojoExecutor()
-    {
-    }
-
-    public DependencyContext newDependencyContext( MavenSession session, List<MojoExecution> mojoExecutions )
-    {
-        Set<String> scopesToCollect = new TreeSet<>();
-        Set<String> scopesToResolve = new TreeSet<>();
-
-        collectDependencyRequirements( scopesToResolve, scopesToCollect, mojoExecutions );
-
-        return new DependencyContext( session.getCurrentProject(), scopesToCollect, scopesToResolve );
-    }
-
-    private void collectDependencyRequirements( Set<String> scopesToResolve, Set<String> scopesToCollect,
-                                                Collection<MojoExecution> mojoExecutions )
-    {
-        for ( MojoExecution mojoExecution : mojoExecutions )
-        {
-            MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
-
-            scopesToResolve.addAll( toScopes( mojoDescriptor.getDependencyResolutionRequired() ) );
-
-            scopesToCollect.addAll( toScopes( mojoDescriptor.getDependencyCollectionRequired() ) );
-        }
-    }
-
-    private Collection<String> toScopes( String classpath )
-    {
-        Collection<String> scopes = Collections.emptyList();
-
-        if ( StringUtils.isNotEmpty( classpath ) )
-        {
-            if ( Artifact.SCOPE_COMPILE.equals( classpath ) )
-            {
-                scopes = Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED );
-            }
-            else if ( Artifact.SCOPE_RUNTIME.equals( classpath ) )
-            {
-                scopes = Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME );
-            }
-            else if ( Artifact.SCOPE_COMPILE_PLUS_RUNTIME.equals( classpath ) )
-            {
-                scopes = Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED,
-                        Artifact.SCOPE_RUNTIME );
-            }
-            else if ( Artifact.SCOPE_RUNTIME_PLUS_SYSTEM.equals( classpath ) )
-            {
-                scopes = Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_RUNTIME );
-            }
-            else if ( Artifact.SCOPE_TEST.equals( classpath ) )
-            {
-                scopes = Arrays.asList( Artifact.SCOPE_COMPILE, Artifact.SCOPE_SYSTEM, Artifact.SCOPE_PROVIDED,
-                        Artifact.SCOPE_RUNTIME, Artifact.SCOPE_TEST );
-            }
-        }
-        return Collections.unmodifiableCollection( scopes );
-    }
-
-    public void execute( MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex )
-            throws LifecycleExecutionException
-    {
-        DependencyContext dependencyContext = newDependencyContext( session, mojoExecutions );
-
-        PhaseRecorder phaseRecorder = new PhaseRecorder( session.getCurrentProject() );
-
-        final MavenProject project = session.getCurrentProject();
-        final Source source = getSource( mojoExecutions );
-
-        // execute clean bound goals before restoring to not interfere/slowdown clean
-        CacheState cacheState = DISABLED;
-        CacheResult result = CacheResult.empty();
-        if ( source == Source.LIFECYCLE )
-        {
-            List<MojoExecution> cleanPhase = getCleanPhase( mojoExecutions );
-            for ( MojoExecution mojoExecution : cleanPhase )
-            {
-                execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-            }
-            cacheState = cacheConfig.initialize( project, session );
-            if ( cacheState == INITIALIZED )
-            {
-                result = cacheController.findCachedBuild( session, project, projectIndex, mojoExecutions );
-            }
-        }
-
-        boolean restorable = result.isSuccess() || result.isPartialSuccess();
-        boolean restored = result.isSuccess(); // if partially restored need to save increment
-        if ( restorable )
-        {
-            restored &= restoreProject( result, mojoExecutions, projectIndex, dependencyContext, phaseRecorder );
-        }
-        else
-        {
-            for ( MojoExecution mojoExecution : mojoExecutions )
-            {
-                if ( source == Source.CLI || isLaterPhase( mojoExecution.getLifecyclePhase(), "post-clean" ) )
-                {
-                    execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-                }
-            }
-        }
-
-        if ( cacheState == INITIALIZED && ( !restorable || !restored ) )
-        {
-            final Map<String, MojoExecutionEvent> executionEvents = mojoListener.getProjectExecutions( project );
-            cacheController.save( result, mojoExecutions, executionEvents );
-        }
-
-        if ( cacheConfig.isFailFast() && !result.isSuccess() )
-        {
-            throw new LifecycleExecutionException(
-                    "Failed to restore project[" + getVersionlessProjectKey( project ) + "] from cache, failing build.",
-                    project );
-        }
-    }
-
-    private Source getSource( List<MojoExecution> mojoExecutions )
-    {
-        if ( mojoExecutions == null || mojoExecutions.isEmpty() )
-        {
-            return null;
-        }
-        for ( MojoExecution mojoExecution : mojoExecutions )
-        {
-            if ( mojoExecution.getSource() == Source.CLI )
-            {
-                return Source.CLI;
-            }
-        }
-        return Source.LIFECYCLE;
-    }
-
-    private boolean restoreProject( CacheResult cacheResult,
-                                    List<MojoExecution> mojoExecutions,
-                                    ProjectIndex projectIndex,
-                                    DependencyContext dependencyContext,
-                                    PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
-    {
-
-        final BuildInfo buildInfo = cacheResult.getBuildInfo();
-        final MavenProject project = cacheResult.getContext().getProject();
-        final MavenSession session = cacheResult.getContext().getSession();
-        final List<MojoExecution> cachedSegment = buildInfo.getCachedSegment( mojoExecutions );
-
-        boolean restored = cacheController.restoreProjectArtifacts( cacheResult );
-        if ( !restored )
-        {
-            logger.info(
-                    "[CACHE][" + project.getArtifactId()
-                            + "] Cannot restore project artifacts, continuing with non cached build" );
-            return false;
-        }
-
-        for ( MojoExecution cacheCandidate : cachedSegment )
-        {
-
-            if ( cacheController.isForcedExecution( project, cacheCandidate ) )
-            {
-                logger.info(
-                        "[CACHE][" + project.getArtifactId() + "] Mojo execution is forced by project property: "
-                                + cacheCandidate.getMojoDescriptor().getFullGoalName() );
-                execute( session, cacheCandidate, projectIndex, dependencyContext, phaseRecorder );
-            }
-            else
-            {
-                restored = verifyCacheConsistency( cacheCandidate, buildInfo, project, session, projectIndex,
-                        dependencyContext, phaseRecorder );
-                if ( !restored )
-                {
-                    break;
-                }
-            }
-        }
-
-        if ( !restored )
-        {
-            // cleanup partial state
-            project.getArtifact().setFile( null );
-            project.getArtifact().setResolved( false );
-            project.getAttachedArtifacts().clear();
-            mojoListener.remove( project );
-            // build as usual
-            for ( MojoExecution mojoExecution : cachedSegment )
-            {
-                execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-            }
-        }
-
-        for ( MojoExecution mojoExecution : buildInfo.getPostCachedSegment( mojoExecutions ) )
-        {
-            execute( session, mojoExecution, projectIndex, dependencyContext, phaseRecorder );
-        }
-        return restored;
-    }
-
-    private boolean verifyCacheConsistency( MojoExecution cacheCandidate,
-                                            BuildInfo cachedBuildInfo,
-                                            MavenProject project,
-                                            MavenSession session,
-                                            ProjectIndex projectIndex,
-                                            DependencyContext dependencyContext,
-                                            PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
-    {
-
-        AtomicBoolean consistent = new AtomicBoolean( true );
-        final MojoExecutionManager mojoChecker = new MojoExecutionManager( project, cacheController, cachedBuildInfo,
-                consistent, logger, cacheConfig );
-
-        if ( mojoChecker.needCheck( cacheCandidate, session ) )
-        {
-            try
-            {
-                // actual execution will not happen (if not forced). decision delayed to execution time
-                // then all properties are resolved.
-                cacheCandidate.setMojoExecutionManager( mojoChecker );
-                IDependencyContext nop = new NoResolutionContext( dependencyContext );
-                execute( session, cacheCandidate, projectIndex, nop, phaseRecorder );
-            }
-            finally
-            {
-                cacheCandidate.setMojoExecutionManager( null );
-            }
-        }
-        else
-        {
-            logger.info(
-                    "[CACHE][" + project.getArtifactId() + "] Skipping plugin execution (cached): "
-                            + cacheCandidate.getMojoDescriptor().getFullGoalName() );
-        }
-
-        return consistent.get();
-    }
-
-    private List<MojoExecution> getCleanPhase( List<MojoExecution> mojoExecutions )
-    {
-        List<MojoExecution> list = new ArrayList<>();
-        for ( MojoExecution mojoExecution : mojoExecutions )
-        {
-            if ( isLaterPhase( mojoExecution.getLifecyclePhase(), "post-clean" ) )
-            {
-                break;
-            }
-            list.add( mojoExecution );
-        }
-        return list;
-    }
-
-    public void execute( MavenSession session,
-                         MojoExecution mojoExecution,
-                         ProjectIndex projectIndex,
-                         IDependencyContext dependencyContext,
-                         PhaseRecorder phaseRecorder ) throws LifecycleExecutionException
-    {
-        execute( session, mojoExecution, projectIndex, dependencyContext );
-        phaseRecorder.observeExecution( mojoExecution );
-    }
-
-    private void execute( MavenSession session,
-                          MojoExecution mojoExecution,
-                          ProjectIndex projectIndex,
-                          IDependencyContext dependencyContext ) throws LifecycleExecutionException
-    {
-        MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
-
-        try
-        {
-            mavenPluginManager.checkRequiredMavenVersion( mojoDescriptor.getPluginDescriptor() );
-        }
-        catch ( PluginIncompatibleException e )
-        {
-            throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
-        }
-
-        if ( mojoDescriptor.isProjectRequired() && !session.getRequest().isProjectPresent() )
-        {
-            Throwable cause = new MissingProjectException(
-                    "Goal requires a project to execute" + " but there is no POM in this directory ("
-                            + session.getExecutionRootDirectory() + ")."
-                            + " Please verify you invoked Maven from the correct directory." );
-            throw new LifecycleExecutionException( mojoExecution, null, cause );
-        }
-
-        if ( mojoDescriptor.isOnlineRequired() && session.isOffline() )
-        {
-            if ( Source.CLI.equals( mojoExecution.getSource() ) )
-            {
-                Throwable cause = new IllegalStateException(
-                        "Goal requires online mode for execution" + " but Maven is currently offline." );
-                throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), cause );
-            }
-            else
-            {
-                eventCatapult.fire( ExecutionEvent.Type.MojoSkipped, session, mojoExecution );
-
-                return;
-            }
-        }
-
-        List<MavenProject> forkedProjects = executeForkedExecutions( mojoExecution, session, projectIndex );
-
-        ensureDependenciesAreResolved( mojoDescriptor, session, dependencyContext );
-
-        eventCatapult.fire( ExecutionEvent.Type.MojoStarted, session, mojoExecution );
-
-        try
-        {
-            try
-            {
-                pluginManager.executeMojo( session, mojoExecution );
-            }
-            catch ( MojoFailureException
-                    | PluginManagerException
-                    | PluginConfigurationException
-                    | MojoExecutionException e )
-            {
-                throw new LifecycleExecutionException( mojoExecution, session.getCurrentProject(), e );
-            }
-
-            eventCatapult.fire( ExecutionEvent.Type.MojoSucceeded, session, mojoExecution );
-        }
-        catch ( LifecycleExecutionException e )
-        {
-            eventCatapult.fire( ExecutionEvent.Type.MojoFailed, session, mojoExecution, e );
-
-            throw e;
-        }
-        finally
-        {
-            for ( MavenProject forkedProject : forkedProjects )
-            {
-                forkedProject.setExecutionProject( null );
-            }
-        }
-    }
-
-    public void ensureDependenciesAreResolved( MojoDescriptor mojoDescriptor,
-                                               MavenSession session,
-                                               IDependencyContext dependencyContext ) throws LifecycleExecutionException
-
-    {
-        MavenProject project = dependencyContext.getProject();
-        boolean aggregating = mojoDescriptor.isAggregator();
-
-        if ( dependencyContext.isResolutionRequiredForCurrentProject() )
-        {
-            Collection<String> scopesToCollect = dependencyContext.getScopesToCollectForCurrentProject();
-            Collection<String> scopesToResolve = dependencyContext.getScopesToResolveForCurrentProject();
-
-            lifeCycleDependencyResolver.resolveProjectDependencies( project, scopesToCollect, scopesToResolve, session,
-                    aggregating, Collections.<Artifact>emptySet() );
-
-            dependencyContext.synchronizeWithProjectState();
-        }
-
-        if ( aggregating )
-        {
-            Collection<String> scopesToCollect = toScopes( mojoDescriptor.getDependencyCollectionRequired() );
-            Collection<String> scopesToResolve = toScopes( mojoDescriptor.getDependencyResolutionRequired() );
-
-            if ( dependencyContext.isResolutionRequiredForAggregatedProjects( scopesToCollect, scopesToResolve ) )
-            {
-                for ( MavenProject aggregatedProject : session.getProjects() )
-                {
-                    if ( aggregatedProject != project )
-                    {
-                        lifeCycleDependencyResolver.resolveProjectDependencies( aggregatedProject, scopesToCollect,
-                                scopesToResolve, session, aggregating, Collections.<Artifact>emptySet() );
-                    }
-                }
-            }
-        }
-
-        ArtifactFilter artifactFilter = getArtifactFilter( mojoDescriptor );
-        List<MavenProject> projectsToResolve = LifecycleDependencyResolver.getProjects( session.getCurrentProject(),
-                session, mojoDescriptor.isAggregator() );
-        for ( MavenProject projectToResolve : projectsToResolve )
-        {
-            projectToResolve.setArtifactFilter( artifactFilter );
-        }
-    }
-
-    private ArtifactFilter getArtifactFilter( MojoDescriptor mojoDescriptor )
-    {
-        String scopeToResolve = mojoDescriptor.getDependencyResolutionRequired();
-        String scopeToCollect = mojoDescriptor.getDependencyCollectionRequired();
-
-        List<String> scopes = new ArrayList<>( 2 );
-        if ( StringUtils.isNotEmpty( scopeToCollect ) )
-        {
-            scopes.add( scopeToCollect );
-        }
-        if ( StringUtils.isNotEmpty( scopeToResolve ) )
-        {
-            scopes.add( scopeToResolve );
-        }
-
-        if ( scopes.isEmpty() )
-        {
-            return null;
-        }
-        else
-        {
-            return new CumulativeScopeArtifactFilter( scopes );
-        }
-    }
-
-    public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution,
-                                                       MavenSession session,
-                                                       ProjectIndex projectIndex ) throws LifecycleExecutionException
-    {
-        List<MavenProject> forkedProjects = Collections.emptyList();
-
-        Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();
-
-        if ( !forkedExecutions.isEmpty() )
-        {
-            eventCatapult.fire( ExecutionEvent.Type.ForkStarted, session, mojoExecution );
-
-            MavenProject project = session.getCurrentProject();
-
-            forkedProjects = new ArrayList<>( forkedExecutions.size() );
-
-            try
-            {
-                for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
-                {
-                    String projectId = fork.getKey();
-
-                    int index = projectIndex.getIndices().get( projectId );
-
-                    MavenProject forkedProject = projectIndex.getProjects().get( projectId );
-
-                    forkedProjects.add( forkedProject );
-
-                    MavenProject executedProject = forkedProject.clone();
-
-                    forkedProject.setExecutionProject( executedProject );
-
-                    List<MojoExecution> mojoExecutions = fork.getValue();
-
-                    if ( mojoExecutions.isEmpty() )
-                    {
-                        continue;
-                    }
-
-                    try
-                    {
-                        session.setCurrentProject( executedProject );
-                        session.getProjects().set( index, executedProject );
-                        projectIndex.getProjects().put( projectId, executedProject );
-
-                        eventCatapult.fire( ExecutionEvent.Type.ForkedProjectStarted, session, mojoExecution );
-
-                        execute( session, mojoExecutions, projectIndex );
-
-                        eventCatapult.fire( ExecutionEvent.Type.ForkedProjectSucceeded, session, mojoExecution );
-                    }
-                    catch ( LifecycleExecutionException e )
-                    {
-                        eventCatapult.fire( ExecutionEvent.Type.ForkedProjectFailed, session, mojoExecution, e );
-
-                        throw e;
-                    }
-                    finally
-                    {
-                        projectIndex.getProjects().put( projectId, forkedProject );
-                        session.getProjects().set( index, forkedProject );
-                        session.setCurrentProject( project );
-                    }
-                }
-
-                eventCatapult.fire( ExecutionEvent.Type.ForkSucceeded, session, mojoExecution );
-            }
-            catch ( LifecycleExecutionException e )
-            {
-                eventCatapult.fire( ExecutionEvent.Type.ForkFailed, session, mojoExecution, e );
+    void execute( MavenSession session, List<MojoExecution> mojoExecutions, ProjectIndex projectIndex )
+            throws LifecycleExecutionException;
 
-                throw e;
-            }
-        }
+    List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session,
+                                                ProjectIndex projectIndex )
+            throws LifecycleExecutionException;
 
-        return forkedProjects;
-    }
-}
+}
\ No newline at end of file
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
index 1650e24..a9cdb4a 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java
@@ -21,6 +21,7 @@ import org.apache.maven.lifecycle.internal.*;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -30,12 +31,11 @@ import java.util.List;
  * @author Kristian Rosenvold
  */
 public class MojoExecutorStub
-    extends MojoExecutor
+    implements MojoExecutor
 { // This is being lazy instead of making interface
 
     public List<MojoExecution> executions = Collections.synchronizedList( new ArrayList<MojoExecution>() );
 
-    @Override
     public void execute(MavenSession session, MojoExecution mojoExecution, ProjectIndex projectIndex,
                         IDependencyContext dependencyContext, PhaseRecorder phaseRecorder )
         throws LifecycleExecutionException
@@ -50,8 +50,13 @@ public class MojoExecutorStub
         executions.addAll(mojoExecutions);
     }
 
+    @Override
+    public List<MavenProject> executeForkedExecutions( MojoExecution mojoExecution, MavenSession session, ProjectIndex projectIndex ) throws LifecycleExecutionException
+    {
+        return null;
+    }
 
-    public static MojoDescriptor createMojoDescriptor( String mojoDescription )
+    public static MojoDescriptor createMojoDescriptor(String mojoDescription )
     {
         final PluginDescriptor descriptor = new PluginDescriptor();
         descriptor.setArtifactId( mojoDescription );
diff --git a/pom.xml b/pom.xml
index bfadcb6..d6bc44d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,7 @@ under the License.
     <module>maven-model</module>
     <module>maven-model-builder</module>
     <module>maven-core</module>
+    <module>maven-caching</module>
     <module>maven-settings</module>
     <module>maven-settings-builder</module>
     <module>maven-artifact</module>