com.redhat.victims.ArtifactCollector Maven / Gradle / Ivy
package com.redhat.victims;
/*
* #%L
* This file is part of victims-enforcer.
* %%
* Copyright (C) 2013 The Victims Project
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
* #L%
*/
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.artifact.filter.ScopeArtifactFilter;
import org.apache.maven.shared.dependency.tree.DependencyNode;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public interface ArtifactCollector {
public ArtifactCollector with(EnforcerRuleHelper helper);
public Set getArtifacts();
}
class BaseArtifactCollector implements ArtifactCollector {
protected EnforcerRuleHelper helper;
protected HashSet artifacts;
protected MavenProject project;
private void reset(){
this.artifacts = new HashSet();
try {
project = (MavenProject) helper.evaluate("${project}");
} catch (ExpressionEvaluationException e) {
}
}
protected void gatherArtifacts() {
for (Object a : project.getArtifacts()){
if (a instanceof Artifact) {
Artifact artifact = (Artifact) a;
artifacts.add(artifact);
helper.getLog().debug("[victims-enforcer] adding project dependency " + artifact.toString());
}
}
}
public ArtifactCollector with(EnforcerRuleHelper helper){
this.helper = helper;
return this;
}
public Set getArtifacts() {
if (helper != null && (artifacts == null || artifacts.size() == 0)){
reset();
gatherArtifacts();
}
return artifacts;
}
}
class DependencyTreeCollector extends BaseArtifactCollector {
@Override
protected void gatherArtifacts() {
try {
ArtifactRepository localRepository = (ArtifactRepository) helper.evaluate("${localRepository}");
DependencyTreeBuilder treeBuilder = (DependencyTreeBuilder) helper.getComponent(DependencyTreeBuilder.class);
ScopeArtifactFilter filter = new ScopeArtifactFilter();
filter.setIncludeRuntimeScopeWithImplications(true); // compile runtime
DependencyNode treeRoot = treeBuilder.buildDependencyTree(project, localRepository, filter);
helper.getLog().debug("[victims-enforcer] artifact id of root = " + treeRoot.getArtifact().toString());
CollectingDependencyNodeVisitor visitor = new CollectingDependencyNodeVisitor();
treeRoot.accept(visitor);
for (DependencyNode node : visitor.getNodes()){
if (node.getState() == DependencyNode.INCLUDED && ! treeRoot.equals(node)){
Artifact artifact = node.getArtifact();
if (artifact != null){
artifacts.add(artifact);
helper.getLog().debug("[victims-enforcer] adding dependency " + artifact.toString());
}
}
}
} catch (java.lang.NoSuchMethodError ex){
helper.getLog().error(ex);
} catch (ComponentLookupException ex) {
helper.getLog().error(ex);
} catch (ExpressionEvaluationException ex) {
helper.getLog().error(ex);
} catch (DependencyTreeBuilderException ex) {
helper.getLog().error(ex);
}
}
}
class ReactorCollector extends BaseArtifactCollector{
@Override
protected void gatherArtifacts() {
try {
List reactorProjects = (List)helper.evaluate("${reactorProjects}");
for (MavenProject rp: reactorProjects){
for (Object item : rp.getArtifacts()){
if (item != null && item instanceof Artifact){
Artifact artifact = (Artifact) item;
artifacts.add(artifact);
helper.getLog().debug("[victims-enforcer] adding reactor dependency " + artifact.toString());
}
}
}
} catch (ExpressionEvaluationException ex) {
helper.getLog().error(ex);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy