in src/main/java/org/apache/maven/buildcache/CacheDiff.java [159:197]
private void compareDependencies(ProjectsInputInfo current, ProjectsInputInfo baseline) {
final Map<String, DigestItem> currentDependencies = current.getItems().stream()
.filter(item -> "dependency".equals(item.getType()))
.collect(Collectors.toMap(DigestItem::getValue, item -> item));
final Map<String, DigestItem> baselineDependencies = baseline.getItems().stream()
.filter(item -> "dependency".equals(item.getType()))
.collect(Collectors.toMap(DigestItem::getValue, item -> item));
if (!Objects.equals(currentDependencies.keySet(), baselineDependencies.keySet())) {
Set<String> currentVsBaseline = diff(currentDependencies.keySet(), baselineDependencies.keySet());
Set<String> baselineVsCurrent = diff(baselineDependencies.keySet(), currentDependencies.keySet());
addNewMismatch(
"dependencies files",
"Remote and local builds contain different sets of dependencies and cannot be matched. "
+ "Added dependencies: " + currentVsBaseline + ". Removed dependencies: "
+ baselineVsCurrent,
"Remote and local builds should have identical dependencies. "
+ "The difference manifests changes in downstream dependencies or introduced snapshots.");
return;
}
for (Map.Entry<String, DigestItem> entry : currentDependencies.entrySet()) {
String dependencyKey = entry.getKey();
DigestItem currentDependency = entry.getValue();
// null safe - sets compared for differences above
final DigestItem baselineDependency = baselineDependencies.get(dependencyKey);
if (!StringUtils.equals(currentDependency.getHash(), baselineDependency.getHash())) {
addNewMismatch(
dependencyKey,
currentDependency.getHash(),
baselineDependency.getHash(),
"Downstream project or snapshot changed",
"Find downstream project and investigate difference in the downstream project. "
+ "Enable fail fast mode and single threaded execution to simplify debug.");
}
}
}