public void execute()

in src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java [451:664]


    public void execute() throws MojoExecutionException {
        if (skip) {
            getLog().info("Shading has been skipped.");
            return;
        }

        setupHintedShader();

        Set<File> artifacts = new LinkedHashSet<>();
        Set<String> artifactIds = new LinkedHashSet<>();
        Set<File> sourceArtifacts = new LinkedHashSet<>();
        Set<File> testArtifacts = new LinkedHashSet<>();
        Set<File> testSourceArtifacts = new LinkedHashSet<>();

        ArtifactSelector artifactSelector = new ArtifactSelector(project.getArtifact(), artifactSet, shadedGroupFilter);

        if (artifactSelector.isSelected(project.getArtifact())
                && !"pom".equals(project.getArtifact().getType())) {
            if (invalidMainArtifact()) {
                createErrorOutput();
                throw new MojoExecutionException(
                        "Failed to create shaded artifact, " + "project main artifact does not exist.");
            }

            artifacts.add(project.getArtifact().getFile());

            if (extraJars != null && !extraJars.isEmpty()) {
                for (File extraJar : extraJars) {
                    if (!Files.isRegularFile(extraJar.toPath())) {
                        throw new MojoExecutionException(
                                "Failed to create shaded artifact: parameter extraJars contains path " + extraJar
                                        + " that is not a file (does not exist or is not a file)");
                    }
                    artifacts.add(extraJar);
                }
            }

            if (createSourcesJar) {
                File file = shadedSourcesArtifactFile();
                if (file.isFile()) {
                    sourceArtifacts.add(file);
                }
            }

            if (shadeTestJar) {
                File file = shadedTestArtifactFile();
                if (file.isFile()) {
                    testArtifacts.add(file);
                }
            }

            if (createTestSourcesJar) {
                File file = shadedTestSourcesArtifactFile();
                if (file.isFile()) {
                    testSourceArtifacts.add(file);
                }
            }
        }

        processArtifactSelectors(
                artifacts, artifactIds, sourceArtifacts, testArtifacts, testSourceArtifacts, artifactSelector);

        File outputJar = (outputFile != null) ? outputFile : shadedArtifactFileWithClassifier();
        File sourcesJar = shadedSourceArtifactFileWithClassifier();
        File testJar = shadedTestArtifactFileWithClassifier();
        File testSourcesJar = shadedTestSourceArtifactFileWithClassifier();

        // Now add our extra resources
        try {
            List<Filter> filters = getFilters();

            List<Relocator> relocators = getRelocators();

            List<ResourceTransformer> resourceTransformers = getResourceTransformers();

            if (createDependencyReducedPom) {
                createDependencyReducedPom(artifactIds);

                if (useDependencyReducedPomInJar) {
                    // In some cases the used implementation of the resourceTransformers is immutable.
                    resourceTransformers = new ArrayList<>(resourceTransformers);
                    resourceTransformers.addAll(createPomReplaceTransformers(project, dependencyReducedPomLocation));
                }
            }

            ShadeRequest shadeRequest =
                    shadeRequest("jar", artifacts, outputJar, filters, relocators, resourceTransformers);

            shader.shade(shadeRequest);

            if (createSourcesJar) {
                ShadeRequest shadeSourcesRequest = createShadeSourcesRequest(
                        "sources-jar", sourceArtifacts, sourcesJar, filters, relocators, resourceTransformers);

                shader.shade(shadeSourcesRequest);
            }

            if (shadeTestJar) {
                ShadeRequest shadeTestRequest =
                        shadeRequest("test-jar", testArtifacts, testJar, filters, relocators, resourceTransformers);

                shader.shade(shadeTestRequest);
            }

            if (createTestSourcesJar) {
                ShadeRequest shadeTestSourcesRequest = createShadeSourcesRequest(
                        "test-sources-jar",
                        testSourceArtifacts,
                        testSourcesJar,
                        filters,
                        relocators,
                        resourceTransformers);

                shader.shade(shadeTestSourcesRequest);
            }

            if (outputFile == null) {
                boolean renamed = false;

                // rename the output file if a specific finalName is set
                // but don't rename if the finalName is the <build><finalName>
                // because this will be handled implicitly later
                if (finalName != null
                        && finalName.length() > 0 //
                        && !finalName.equals(project.getBuild().getFinalName())) {
                    String finalFileName = finalName + "."
                            + project.getArtifact().getArtifactHandler().getExtension();
                    File finalFile = new File(outputDirectory, finalFileName);
                    replaceFile(finalFile, outputJar);
                    outputJar = finalFile;

                    // Also support the sources JAR
                    if (createSourcesJar) {
                        finalFileName = finalName + "-sources.jar";
                        finalFile = new File(outputDirectory, finalFileName);
                        replaceFile(finalFile, sourcesJar);
                        sourcesJar = finalFile;
                    }

                    // Also support the test JAR
                    if (shadeTestJar) {
                        finalFileName = finalName + "-tests.jar";
                        finalFile = new File(outputDirectory, finalFileName);
                        replaceFile(finalFile, testJar);
                        testJar = finalFile;
                    }

                    if (createTestSourcesJar) {
                        finalFileName = finalName + "-test-sources.jar";
                        finalFile = new File(outputDirectory, finalFileName);
                        replaceFile(finalFile, testSourcesJar);
                        testSourcesJar = finalFile;
                    }

                    renamed = true;
                }

                if (shadedArtifactAttached) {
                    getLog().info("Attaching shaded artifact.");
                    projectHelper.attachArtifact(
                            project, project.getArtifact().getType(), shadedClassifierName, outputJar);
                    if (createSourcesJar) {
                        projectHelper.attachArtifact(
                                project, "java-source", shadedClassifierName + "-sources", sourcesJar);
                    }

                    if (shadeTestJar) {
                        projectHelper.attachArtifact(project, "test-jar", shadedClassifierName + "-tests", testJar);
                    }

                    if (createTestSourcesJar) {
                        projectHelper.attachArtifact(
                                project, "java-source", shadedClassifierName + "-test-sources", testSourcesJar);
                    }
                } else if (!renamed) {
                    getLog().info("Replacing original artifact with shaded artifact.");
                    File originalArtifact = project.getArtifact().getFile();
                    if (originalArtifact != null) {
                        replaceFile(originalArtifact, outputJar);

                        if (createSourcesJar) {
                            getLog().info("Replacing original source artifact with shaded source artifact.");
                            File shadedSources = shadedSourcesArtifactFile();

                            replaceFile(shadedSources, sourcesJar);

                            projectHelper.attachArtifact(project, "java-source", "sources", shadedSources);
                        }

                        if (shadeTestJar) {
                            getLog().info("Replacing original test artifact with shaded test artifact.");
                            File shadedTests = shadedTestArtifactFile();

                            replaceFile(shadedTests, testJar);

                            projectHelper.attachArtifact(project, "test-jar", shadedTests);
                        }

                        if (createTestSourcesJar) {
                            getLog().info("Replacing original test source artifact "
                                    + "with shaded test source artifact.");
                            File shadedTestSources = shadedTestSourcesArtifactFile();

                            replaceFile(shadedTestSources, testSourcesJar);

                            projectHelper.attachArtifact(project, "java-source", "test-sources", shadedTestSources);
                        }
                    }
                }
            }
        } catch (Exception e) {
            throw new MojoExecutionException("Error creating shaded jar: " + e.getMessage(), e);
        }
    }