in src/main/java/org/apache/maven/plugins/shade/DefaultShader.java [117:173]
public void shade(ShadeRequest shadeRequest) throws IOException, MojoExecutionException {
Set<String> resources = new HashSet<>();
ManifestResourceTransformer manifestTransformer = null;
List<ResourceTransformer> transformers = new ArrayList<>(shadeRequest.getResourceTransformers());
for (Iterator<ResourceTransformer> it = transformers.iterator(); it.hasNext(); ) {
ResourceTransformer transformer = it.next();
if (transformer instanceof ManifestResourceTransformer) {
manifestTransformer = (ManifestResourceTransformer) transformer;
it.remove();
}
}
final DefaultPackageMapper packageMapper = new DefaultPackageMapper(shadeRequest.getRelocators());
// noinspection ResultOfMethodCallIgnored
shadeRequest.getUberJar().getParentFile().mkdirs();
try (JarOutputStream out =
new JarOutputStream(new BufferedOutputStream(new CachingOutputStream(shadeRequest.getUberJar())))) {
goThroughAllJarEntriesForManifestTransformer(shadeRequest, resources, manifestTransformer, out);
// CHECKSTYLE_OFF: MagicNumber
Map<String, HashSet<File>> duplicates = new HashMap<>();
// CHECKSTYLE_ON: MagicNumber
shadeJars(shadeRequest, resources, transformers, out, duplicates, packageMapper);
// CHECKSTYLE_OFF: MagicNumber
Map<Collection<File>, HashSet<String>> overlapping = new HashMap<>();
// CHECKSTYLE_ON: MagicNumber
for (String clazz : duplicates.keySet()) {
Collection<File> jarz = duplicates.get(clazz);
if (jarz.size() > 1) {
overlapping.computeIfAbsent(jarz, k -> new HashSet<>()).add(clazz);
}
}
// Log a summary of duplicates
logSummaryOfDuplicates(overlapping);
if (!overlapping.keySet().isEmpty()) {
showOverlappingWarning();
}
for (ResourceTransformer transformer : transformers) {
if (transformer.hasTransformedResource()) {
transformer.modifyOutputStream(out);
}
}
}
for (Filter filter : shadeRequest.getFilters()) {
filter.finished();
}
}