added exclusion support
This commit is contained in:
parent
d6c69768de
commit
01438cd7a8
@ -16,21 +16,21 @@ package com.inteligr8.wildfly.maven;
|
|||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.artifact.DefaultArtifact;
|
||||||
|
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
|
||||||
|
import org.apache.maven.artifact.resolver.filter.ExclusionArtifactFilter;
|
||||||
|
import org.apache.maven.model.Exclusion;
|
||||||
import org.apache.maven.model.building.ModelBuildingException;
|
import org.apache.maven.model.building.ModelBuildingException;
|
||||||
import org.apache.maven.model.resolution.UnresolvableModelException;
|
import org.apache.maven.model.resolution.UnresolvableModelException;
|
||||||
import org.eclipse.aether.RepositoryException;
|
import org.eclipse.aether.RepositoryException;
|
||||||
import org.eclipse.aether.artifact.DefaultArtifact;
|
|
||||||
import org.eclipse.aether.collection.DependencyGraphTransformationContext;
|
import org.eclipse.aether.collection.DependencyGraphTransformationContext;
|
||||||
import org.eclipse.aether.collection.DependencyGraphTransformer;
|
import org.eclipse.aether.collection.DependencyGraphTransformer;
|
||||||
import org.eclipse.aether.graph.DependencyFilter;
|
import org.eclipse.aether.graph.DependencyFilter;
|
||||||
import org.eclipse.aether.graph.DependencyNode;
|
import org.eclipse.aether.graph.DependencyNode;
|
||||||
import org.eclipse.aether.resolution.ArtifactRequest;
|
|
||||||
import org.eclipse.aether.resolution.ArtifactResolutionException;
|
import org.eclipse.aether.resolution.ArtifactResolutionException;
|
||||||
import org.eclipse.aether.resolution.ArtifactResult;
|
|
||||||
import org.eclipse.aether.util.artifact.JavaScopes;
|
import org.eclipse.aether.util.artifact.JavaScopes;
|
||||||
import org.eclipse.aether.util.filter.DependencyFilterUtils;
|
import org.eclipse.aether.util.filter.DependencyFilterUtils;
|
||||||
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
|
import org.eclipse.aether.util.filter.ScopeDependencyFilter;
|
||||||
@ -67,7 +67,7 @@ public class IndexingDependencyGraphTransformer implements DependencyGraphTransf
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context) throws RepositoryException {
|
public DependencyNode transformGraph(DependencyNode node, DependencyGraphTransformationContext context) throws RepositoryException {
|
||||||
this.crawl(node, new Stack<DependencyNode>());
|
this.crawl(node, new Stack<DependencyNode>(), new Stack<Exclusion>());
|
||||||
|
|
||||||
return this.transfomer.transformGraph(node, context);
|
return this.transfomer.transformGraph(node, context);
|
||||||
}
|
}
|
||||||
@ -78,16 +78,42 @@ public class IndexingDependencyGraphTransformer implements DependencyGraphTransf
|
|||||||
* @param node A dependency.
|
* @param node A dependency.
|
||||||
* @param ancestors A stack of ancestral artifacts; parent on top; root on bottom; empty if root.
|
* @param ancestors A stack of ancestral artifacts; parent on top; root on bottom; empty if root.
|
||||||
*/
|
*/
|
||||||
private void crawl(DependencyNode node, Stack<DependencyNode> ancestors) {
|
private void crawl(DependencyNode node, Stack<DependencyNode> ancestors, Stack<Exclusion> exclusions) {
|
||||||
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
|
this.dac.getLog().debug("Crawling: " + ancestors + ": " + node);
|
||||||
|
if (!new ExclusionArtifactFilter(exclusions).include(this.toMavenArtifact(node.getArtifact()))) {
|
||||||
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
|
this.dac.getLog().debug("Excluding: " + node);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!this.filter.accept(node, ancestors))
|
if (!this.filter.accept(node, ancestors))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
boolean doExclude = node.getDependency() != null && node.getDependency().getExclusions() != null && !node.getDependency().getExclusions().isEmpty();
|
||||||
|
int pushedExclusions = 0;
|
||||||
|
if (doExclude) {
|
||||||
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
|
this.dac.getLog().debug("Will start excluding: " + node.getDependency().getExclusions());
|
||||||
|
for (org.eclipse.aether.graph.Exclusion exclusion : node.getDependency().getExclusions()) {
|
||||||
|
exclusions.push(this.toMavenExclusion(exclusion));
|
||||||
|
pushedExclusions++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.index(node, Collections.unmodifiableList(ancestors));
|
this.index(node, Collections.unmodifiableList(ancestors));
|
||||||
|
|
||||||
ancestors.push(node);
|
ancestors.push(node);
|
||||||
for (DependencyNode child : node.getChildren())
|
for (DependencyNode child : node.getChildren())
|
||||||
this.crawl(child, ancestors);
|
this.crawl(child, ancestors, exclusions);
|
||||||
ancestors.pop();
|
ancestors.pop();
|
||||||
|
|
||||||
|
if (doExclude) {
|
||||||
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
|
this.dac.getLog().debug("Will stop excluding: " + node.getDependency().getExclusions());
|
||||||
|
for (int e = 0; e < pushedExclusions; e++)
|
||||||
|
exclusions.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -121,17 +147,22 @@ public class IndexingDependencyGraphTransformer implements DependencyGraphTransf
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SystemModule:
|
case SystemModule:
|
||||||
case InSystemModule:
|
|
||||||
if (this.dac.getLog().isDebugEnabled())
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
this.dac.getLog().debug(nodeId + ": is in a module");
|
this.dac.getLog().debug(nodeId + ": is in a module");
|
||||||
this.dindex.indexType(nodeId, DependencyType.InSystemModule);
|
this.dindex.indexType(nodeId, DependencyType.InSystemModule);
|
||||||
return;
|
return;
|
||||||
|
case InSystemModule:
|
||||||
|
this.dac.getLog().debug(nodeId + ": is a dependency of something in a module, but not yet indexed (was excluded?)");
|
||||||
|
//this.dindex.indexType(nodeId, DependencyType.InSystemModule);
|
||||||
|
return;
|
||||||
case Module:
|
case Module:
|
||||||
case InModule:
|
|
||||||
if (this.dac.getLog().isDebugEnabled())
|
if (this.dac.getLog().isDebugEnabled())
|
||||||
this.dac.getLog().debug(nodeId + ": is in a module");
|
this.dac.getLog().debug(nodeId + ": is in a module");
|
||||||
this.dindex.indexType(nodeId, DependencyType.InModule);
|
this.dindex.indexType(nodeId, DependencyType.InModule);
|
||||||
return;
|
return;
|
||||||
|
case InModule:
|
||||||
|
this.dac.getLog().debug(nodeId + ": is a dependency of something in a module, but not yet indexed (was excluded?)");
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
// continue
|
// continue
|
||||||
}
|
}
|
||||||
@ -165,5 +196,19 @@ public class IndexingDependencyGraphTransformer implements DependencyGraphTransf
|
|||||||
this.dac.getLog().warn("Filtering out dependency '" + node.getDependency() + "' due to exception", e);
|
this.dac.getLog().warn("Filtering out dependency '" + node.getDependency() + "' due to exception", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Artifact toMavenArtifact(org.eclipse.aether.artifact.Artifact aetherArtifact) {
|
||||||
|
Artifact artifact = new DefaultArtifact(aetherArtifact.getGroupId(), aetherArtifact.getArtifactId(), aetherArtifact.getVersion(), DefaultArtifact.SCOPE_COMPILE, aetherArtifact.getExtension(), aetherArtifact.getClassifier(), new DefaultArtifactHandler());
|
||||||
|
artifact.setGroupId(aetherArtifact.getGroupId());
|
||||||
|
artifact.setArtifactId(aetherArtifact.getArtifactId());
|
||||||
|
return artifact;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Exclusion toMavenExclusion(org.eclipse.aether.graph.Exclusion aetherExclusion) {
|
||||||
|
Exclusion exclusion = new Exclusion();
|
||||||
|
exclusion.setGroupId(aetherExclusion.getGroupId());
|
||||||
|
exclusion.setArtifactId(aetherExclusion.getArtifactId());
|
||||||
|
return exclusion;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -43,10 +43,14 @@ public class ValidationDependencyFilter implements DependencyFilter {
|
|||||||
|
|
||||||
DependencyType type = this.dindex.getType(parentId);
|
DependencyType type = this.dindex.getType(parentId);
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
switch (parent.getDependency().getScope()) {
|
if (parent.getDependency() == null) {
|
||||||
case "test":
|
this.dac.getLog().warn("Has no dependency information: " + parent.getArtifact() + " => " + node.getArtifact());
|
||||||
this.dac.getLog().debug("The dependency parent was excluded as a test artifact: " + parent);
|
} else {
|
||||||
default:
|
switch (parent.getDependency().getScope()) {
|
||||||
|
case "test":
|
||||||
|
this.dac.getLog().debug("The dependency parent was excluded as a test artifact: " + parent);
|
||||||
|
default:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user