Commit b4426761 authored by Brian Long's avatar Brian Long
Browse files

fix bugs

parent 3c73bcb8
Loading
Loading
Loading
Loading
+51 −2
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
 */
package com.inteligr8.maven.ban;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
@@ -23,14 +24,21 @@ import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoFailureException;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.impl.ArtifactResolver;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.inteligr8.maven.model.ArtifactFilter;

public class AbstractBanConfiguration implements BanConfiguration {
public abstract class AbstractBanConfiguration implements BanConfiguration {
    
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private final Pattern artifactPattern = Pattern.compile("^([^:]+):([^:]+)(:([^:]+))?$");
@@ -39,10 +47,51 @@ public class AbstractBanConfiguration implements BanConfiguration {
    protected final List<ArtifactFilter> includeArtifacts = new LinkedList<>();
    protected final List<ArtifactFilter> excludeArtifacts = new LinkedList<>();
    
    private final ArtifactResolver artifactResolver;
    private final MavenSession session;
    
    public AbstractBanConfiguration(MavenSession session, ArtifactResolver artifactResolver) {
        this.session = session;
        this.artifactResolver = artifactResolver;
    }
    
    public void init(Xpp3Dom rootDom) throws IOException, MojoFailureException {
        if (rootDom == null)
            return;

        Xpp3Dom importDom = rootDom.getChild("import");
        if (importDom != null)
            this.processImports(importDom);
        this.processIncludesExcludes(rootDom);
    }
    
    private void processImports(Xpp3Dom importDom) throws IOException, MojoFailureException {
        for (Xpp3Dom child : importDom.getChildren()) {
            BanConfigurationDownloader downloader = null;
            if (child.getName().equals("url")) {
                String url = StringUtils.trimToNull(importDom.getValue());
                downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, url);
            } else if (child.getName().equals("artifact")) {
                Artifact artifact = new DefaultArtifact(child.getValue());
                ArtifactRequest request = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null);
                
                try {
                    ArtifactResult result = this.artifactResolver.resolveArtifact(this.session.getRepositorySession(), request);
                    File file = result.getArtifact().getFile();
                    downloader = new BanConfigurationDownloader(this.session,  this.artifactResolver, file);
                } catch (ArtifactResolutionException are) {
                    this.logger.warn("The artifact could not be resolved; skipping: {}", child.getValue());
                }
            }
            
            if (downloader != null) {
                this.includeArtifacts.addAll(downloader.getIncludeArtifacts());
                this.excludeArtifacts.addAll(downloader.getExcludeArtifacts());
            }
        }
    }
    
    private void processIncludesExcludes(Xpp3Dom rootDom) {
        Xpp3Dom includesDom = rootDom.getChild("includes");
        if (includesDom != null)
            this.includeArtifacts.addAll(this.parseArtifacts(includesDom));
+2 −46
Original line number Diff line number Diff line
@@ -21,18 +21,12 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import org.apache.commons.lang3.StringUtils;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoFailureException;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.impl.ArtifactResolver;
import org.eclipse.aether.resolution.ArtifactRequest;
import org.eclipse.aether.resolution.ArtifactResolutionException;
import org.eclipse.aether.resolution.ArtifactResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@@ -40,16 +34,8 @@ public class BanConfigurationDownloader extends AbstractBanConfiguration {
    
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    private final ArtifactResolver artifactResolver;
    private final MavenSession session;
    
    public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver) {
        this.session = session;
        this.artifactResolver = artifactResolver;
    }
    
    public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, String url) throws IOException, MojoFailureException {
        this(session, artifactResolver);
        super(session, artifactResolver);
        
        try {
            Xpp3Dom rootDom = this.load(new URL(url));
@@ -60,7 +46,7 @@ public class BanConfigurationDownloader extends AbstractBanConfiguration {
    }
    
    public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, File file) throws IOException, MojoFailureException {
        this(session, artifactResolver);
        super(session, artifactResolver);
        
        try {
            Xpp3Dom rootDom = this.load(file);
@@ -70,36 +56,6 @@ public class BanConfigurationDownloader extends AbstractBanConfiguration {
        }
    }
    
    @Override
    public void init(Xpp3Dom rootDom) throws IOException, MojoFailureException {
        Xpp3Dom importDom = rootDom.getChild("import");
        if (importDom != null) {
            for (Xpp3Dom child : importDom.getChildren()) {
                BanConfigurationDownloader downloader = null;
                if (child.getName().equals("url")) {
                    String url = StringUtils.trimToNull(importDom.getValue());
                    downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, url);
                } else if (child.getName().equals("artifact")) {
                    Artifact artifact = new DefaultArtifact(child.getValue());
                    ArtifactRequest request = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null);
                    
                    try {
                        ArtifactResult result = this.artifactResolver.resolveArtifact(this.session.getRepositorySession(), request);
                        File file = result.getArtifact().getFile();
                        downloader = new BanConfigurationDownloader(this.session,  this.artifactResolver, file);
                    } catch (ArtifactResolutionException are) {
                        this.logger.warn("The artifact could not be resolved; skipping: {}", child.getValue());
                    }
                }
                
                if (downloader != null) {
                    this.includeArtifacts.addAll(downloader.getIncludeArtifacts());
                    this.excludeArtifacts.addAll(downloader.getExcludeArtifacts());
                }
            }
        }
    }
    
    private Xpp3Dom load(URL url) throws IOException, XmlPullParserException {
        InputStream istream = url.openStream();
        BufferedInputStream bistream = new BufferedInputStream(istream, 16384);
+5 −1
Original line number Diff line number Diff line
@@ -16,13 +16,17 @@ package com.inteligr8.maven.ban;

import java.io.IOException;

import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoFailureException;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.eclipse.aether.impl.ArtifactResolver;

public class BanConfigurationParser extends AbstractBanConfiguration {
    
    public BanConfigurationParser(Plugin plugin) throws IOException, MojoFailureException {
    public BanConfigurationParser(MavenSession session, ArtifactResolver artifactResolver, Plugin plugin) throws IOException, MojoFailureException {
        super(session, artifactResolver);
        
        Xpp3Dom rootDom = (Xpp3Dom) plugin.getConfiguration();
        this.init(rootDom);
    }
+10 −4
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.graph.DependencyNode;
import org.eclipse.aether.impl.ArtifactResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@@ -52,6 +53,9 @@ public class BanExtension extends AbstractMavenLifecycleParticipant {
    
    private Logger logger = LoggerFactory.getLogger(this.getClass());
    
    @Inject
    private ArtifactResolver artifactResolver;
    
    @Inject
    private ProjectDependenciesResolver projDepResolver;
    
@@ -60,14 +64,15 @@ public class BanExtension extends AbstractMavenLifecycleParticipant {
    
    @Override
    public void afterProjectsRead(MavenSession session) throws MavenExecutionException {
        MavenProject project = session.getCurrentProject();
        BanConfiguration config = this.getConfiguration(project);
        BanConfiguration config = this.getConfiguration(session);
        if (config == null)
            return;
        
        BanDependencyFilter depFilter = new BanDependencyFilter(config.getIncludeArtifacts(), config.getExcludeArtifacts());
        depFilter.setFailFast(true);

        MavenProject project = session.getCurrentProject();
        
        try {
            for (Plugin plugin : project.getBuildPlugins()) {
                this.logger.debug("Evaluating plugin dependencies: {}", plugin);
@@ -97,7 +102,8 @@ public class BanExtension extends AbstractMavenLifecycleParticipant {
        }
    }
    
    private BanConfigurationParser getConfiguration(MavenProject project) throws MavenExecutionException {
    private BanConfiguration getConfiguration(MavenSession session) throws MavenExecutionException {
        MavenProject project = session.getCurrentProject();
        Plugin plugin = project.getPlugin(THIS_PLUGIN_KEY);
        if (plugin == null)
            throw new MavenExecutionException("The plugin is executing but it cannot be found", project.getFile());
@@ -107,7 +113,7 @@ public class BanExtension extends AbstractMavenLifecycleParticipant {
            return null;
        } else {
            try {
                return new BanConfigurationParser(plugin);
                return new BanConfigurationParser(session, this.artifactResolver, plugin);
            } catch (IOException | MojoFailureException e) {
                throw new MavenExecutionException(e.getMessage(), project.getFile());
            }
+23 −5
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.component.annotations.Component;
import org.eclipse.aether.impl.ArtifactResolver;

import com.inteligr8.maven.model.ArtifactFilter;

@@ -54,6 +55,9 @@ public class PurgeRepoMojo extends AbstractMojo {
    @Inject
    private MavenSession session;
    
    @Inject
    private ArtifactResolver artifactResolver;
    
    @Parameter(name = "skip", defaultValue = "false")
    private boolean skip = false;
    
@@ -78,7 +82,7 @@ public class PurgeRepoMojo extends AbstractMojo {
    private void purge() throws MojoFailureException, IOException {
        List<Path> includePaths = new LinkedList<>();
        
        BanConfigurationParser config = this.getConfiguration(this.session.getCurrentProject());
        BanConfigurationParser config = this.getConfiguration();
        
        for (ArtifactFilter afilter : config.getIncludeArtifacts()) {
            if (afilter.getGroupId() == null) {
@@ -159,11 +163,12 @@ public class PurgeRepoMojo extends AbstractMojo {
        }
	}
    
    private BanConfigurationParser getConfiguration(MavenProject project) throws MojoFailureException, IOException {
    private BanConfigurationParser getConfiguration() throws MojoFailureException, IOException {
        MavenProject project = this.session.getCurrentProject();
        Plugin plugin = project.getPlugin(BanExtension.THIS_PLUGIN_KEY);
        if (plugin == null)
            throw new MojoFailureException("The plugin is executing but it cannot be found");
        return new BanConfigurationParser(plugin);
        return new BanConfigurationParser(this.session, this.artifactResolver, plugin);
    }
    
    private Path getGroupPath(ArtifactFilter afilter) {
@@ -243,7 +248,14 @@ public class PurgeRepoMojo extends AbstractMojo {
        
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            try {
                if (!attrs.isDirectory())
                    Files.delete(file);
            } catch (IOException ie) {
                getLog().debug(ie);
                getLog().warn("The file failed to delete: " + file);
            }
            
            return FileVisitResult.CONTINUE;
        }
        
@@ -254,7 +266,13 @@ public class PurgeRepoMojo extends AbstractMojo {
        
        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
            try {
                Files.delete(dir);
            } catch (IOException ie) {
                getLog().debug(ie);
                getLog().warn("The folder failed to delete: " + dir);
            }
            
            return FileVisitResult.CONTINUE;
        }