in src/main/java/org/apache/maven/plugins/shade/DefaultShader.java [474:532]
private void logSummaryOfDuplicates(Map<Collection<File>, HashSet<String>> overlapping) {
for (Collection<File> jarz : overlapping.keySet()) {
List<String> jarzS = new ArrayList<>();
for (File jjar : jarz) {
jarzS.add(jjar.getName());
}
Collections.sort(jarzS); // deterministic messages to be able to compare outputs (useful on CI)
List<String> classes = new LinkedList<>();
List<String> resources = new LinkedList<>();
for (String name : overlapping.get(jarz)) {
if (name.endsWith(".class")) {
classes.add(name.replace(".class", "").replace("/", "."));
} else {
resources.add(name);
}
}
// CHECKSTYLE_OFF: LineLength
final Collection<String> overlaps = new ArrayList<>();
if (!classes.isEmpty()) {
if (resources.size() == 1) {
overlaps.add("class");
} else {
overlaps.add("classes");
}
}
if (!resources.isEmpty()) {
if (resources.size() == 1) {
overlaps.add("resource");
} else {
overlaps.add("resources");
}
}
final List<String> all = new ArrayList<>(classes.size() + resources.size());
all.addAll(classes);
all.addAll(resources);
logger.warn(String.join(", ", jarzS) + " define " + all.size() + " overlapping "
+ String.join(" and ", overlaps) + ": ");
// CHECKSTYLE_ON: LineLength
Collections.sort(all);
int max = 10;
for (int i = 0; i < Math.min(max, all.size()); i++) {
logger.warn(" - " + all.get(i));
}
if (all.size() > max) {
logger.warn(" - " + (all.size() - max) + " more...");
}
}
}