private void performPackaging()

in src/main/java/org/apache/maven/plugins/war/WarMojo.java [216:292]


    private void performPackaging(File warFile)
            throws IOException, ManifestException, DependencyResolutionRequiredException, MojoExecutionException,
                    MojoFailureException {
        getLog().info("Packaging webapp");

        buildExplodedWebapp(getWebappDirectory());

        MavenArchiver archiver = new MavenArchiver();

        archiver.setArchiver(warArchiver);

        archiver.setCreatedBy("Maven WAR Plugin", "org.apache.maven.plugins", "maven-war-plugin");

        archiver.setOutputFile(warFile);

        // configure for Reproducible Builds based on outputTimestamp value
        archiver.configureReproducible(outputTimestamp);

        getLog().debug("Excluding " + Arrays.asList(getPackagingExcludes()) + " from the generated webapp archive.");
        getLog().debug("Including " + Arrays.asList(getPackagingIncludes()) + " in the generated webapp archive.");

        warArchiver.addDirectory(getWebappDirectory(), getPackagingIncludes(), getPackagingExcludes());

        final File webXmlFile = new File(getWebappDirectory(), "WEB-INF/web.xml");
        if (webXmlFile.exists()) {
            warArchiver.setWebxml(webXmlFile);
        }

        warArchiver.setRecompressAddedZips(isRecompressZippedFiles());

        warArchiver.setIncludeEmptyDirs(isIncludeEmptyDirectories());

        if (Boolean.FALSE.equals(failOnMissingWebXml)
                || (failOnMissingWebXml == null && isProjectUsingAtLeastServlet30())) {
            getLog().debug("Build won't fail if web.xml file is missing.");
            warArchiver.setExpectWebXml(false);
        }

        // create archive
        archiver.createArchive(getSession(), getProject(), getArchive());

        // create the classes to be attached if necessary
        if (isAttachClasses()) {
            if (isArchiveClasses() && getJarArchiver().getDestFile() != null) {
                // special handling in case of archived classes: MWAR-240
                File targetClassesFile = getTargetClassesFile();
                FileUtils.copyFile(getJarArchiver().getDestFile(), targetClassesFile);
                projectHelper.attachArtifact(getProject(), "jar", getClassesClassifier(), targetClassesFile);
            } else {
                ClassesPackager packager = new ClassesPackager();
                final File classesDirectory = packager.getClassesDirectory(getWebappDirectory());
                if (classesDirectory.exists()) {
                    getLog().info("Packaging classes");
                    packager.packageClasses(
                            classesDirectory,
                            getTargetClassesFile(),
                            getJarArchiver(),
                            getSession(),
                            getProject(),
                            getArchive(),
                            outputTimestamp);
                    projectHelper.attachArtifact(getProject(), "jar", getClassesClassifier(), getTargetClassesFile());
                }
            }
        }

        if (this.classifier != null) {
            projectHelper.attachArtifact(getProject(), "war", this.classifier, warFile);
        } else {
            Artifact artifact = getProject().getArtifact();
            if (primaryArtifact) {
                artifact.setFile(warFile);
            } else if (artifact.getFile() == null || artifact.getFile().isDirectory()) {
                artifact.setFile(warFile);
            }
        }
    }