public void shade()

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();
        }
    }