
de.is24.deadcode4j.plugin.packaginghandler.WarPackagingHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of deadcode4j-maven-plugin Show documentation
Show all versions of deadcode4j-maven-plugin Show documentation
Finds unused classes of a project
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