All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.is24.deadcode4j.plugin.packaginghandler.WarPackagingHandler Maven / Gradle / Ivy

There is a newer version: 2.1.0
Show newest version
package de.is24.deadcode4j.plugin.packaginghandler;

import de.is24.deadcode4j.Repository;
import de.is24.deadcode4j.plugin.SubDirectoryFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.File;
import java.util.List;

import static com.google.common.collect.Lists.newArrayList;
import static de.is24.deadcode4j.Utils.getKeyFor;
import static org.apache.commons.io.filefilter.FileFilterUtils.*;

/**
 * The WarPackagingHandler returns the configured webappDirectory or the default directory where
 * the webapp is built for "war" packaging.
 *
 * @since 1.2.0
 */
public class WarPackagingHandler extends PackagingHandler {

    @Nullable
    @Override
    public Repository getOutputRepositoryFor(@Nonnull MavenProject project) throws MojoExecutionException {
        final File webAppDirectory = calculateWebAppDirectory(project, true);
        return new Repository(new File(webAppDirectory, "WEB-INF/classes"));
    }

    @Override
    @Nonnull
    public Iterable getAdditionalRepositoriesFor(@Nonnull MavenProject project) throws MojoExecutionException {
        List repositories = newArrayList(getJavaFilesOfCompileSourceRootsAsRepositories(project));
        repositories.add(getWebInfDirectory(project));
        return repositories;
    }

    private File calculateWebAppDirectory(MavenProject project, boolean log) throws MojoExecutionException {
        if (log) {
            logger.debug("Project {} has war packaging, looking for webapp directory...", getKeyFor(project));
        }
        Plugin plugin = project.getPlugin("org.apache.maven.plugins:maven-war-plugin");
        Xpp3Dom configuration = (Xpp3Dom) plugin.getConfiguration();
        Xpp3Dom webappDirectoryConfig = configuration == null ? null : configuration.getChild("webappDirectory");
        final File webappDirectory;
        if (webappDirectoryConfig != null) {
            webappDirectory = new File(webappDirectoryConfig.getValue());
            if (log) {
                logger.debug("  Found custom webapp directory [{}].", webappDirectory);
            }
        } else {
            webappDirectory = new File(project.getBuild().getDirectory() + "/" + project.getBuild().getFinalName());
            if (log) {
                logger.debug("  Using default webapp directory [{}].", webappDirectory);
            }
        }
        if (!webappDirectory.exists()) {
            throw new MojoExecutionException("The webapp directory of " + getKeyFor(project) +
                    " does not exist - please make sure the project is packaged!");
        }
        return webappDirectory;
    }

    private Repository getWebInfDirectory(@Nonnull MavenProject project) throws MojoExecutionException {
        final File webAppDirectory = calculateWebAppDirectory(project, false);
        final File directory = new File(webAppDirectory, "WEB-INF");
        IOFileFilter fileFilter = notFileFilter(or(
                        asFileFilter(new SubDirectoryFilter(directory, "lib")),
                        asFileFilter(new SubDirectoryFilter(directory, "classes")))
        );
        return new Repository(directory, fileFilter);

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy