in src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java [230:283]
private CacheResult analyzeResult(CacheContext context, List<MojoExecution> mojoExecutions, Build build) {
try {
final ProjectsInputInfo inputInfo = context.getInputInfo();
String projectName = getVersionlessProjectKey(context.getProject());
LOGGER.info(
"Found cached build, restoring {} from cache by checksum {}", projectName, inputInfo.getChecksum());
LOGGER.debug("Cached build details: {}", build);
final String cacheImplementationVersion = build.getCacheImplementationVersion();
if (!CACHE_IMPLEMENTATION_VERSION.equals(cacheImplementationVersion)) {
LOGGER.warn(
"Maven and cached build implementations mismatch, caching might not work correctly. "
+ "Implementation version: " + CACHE_IMPLEMENTATION_VERSION + ", cached build: {}",
build.getCacheImplementationVersion());
}
List<MojoExecution> cachedSegment =
lifecyclePhasesHelper.getCachedSegment(context.getProject(), mojoExecutions, build);
List<MojoExecution> missingMojos = build.getMissingExecutions(cachedSegment);
if (!missingMojos.isEmpty()) {
LOGGER.warn(
"Cached build doesn't contains all requested plugin executions "
+ "(missing: {}), cannot restore",
missingMojos);
return failure(build, context);
}
if (!isCachedSegmentPropertiesPresent(context.getProject(), build, cachedSegment)) {
LOGGER.info("Cached build violates cache rules, cannot restore");
return failure(build, context);
}
final String highestRequestPhase =
lifecyclePhasesHelper.resolveHighestLifecyclePhase(context.getProject(), mojoExecutions);
if (lifecyclePhasesHelper.isLaterPhaseThanBuild(highestRequestPhase, build)
&& !canIgnoreMissingSegment(context.getProject(), build, mojoExecutions)) {
LOGGER.info(
"Project {} restored partially. Highest cached goal: {}, requested: {}",
projectName,
build.getHighestCompletedGoal(),
highestRequestPhase);
return partialSuccess(build, context);
}
return success(build, context);
} catch (Exception e) {
LOGGER.error("Failed to restore project", e);
localCache.clearCache(context);
return failure(build, context);
}
}