Index: maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java =================================================================== --- maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (revision 1159034) +++ maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java (working copy) @@ -60,8 +60,12 @@ String SCOPE_SYSTEM = "system"; - String SCOPE_IMPORT = "import"; // Used to import dependencyManagement dependencies + /** Used to import dependencyManagement dependencies */ + String SCOPE_IMPORT = "import"; + /** Used to exclude transitive dependencies */ + String SCOPE_EXCLUDED = "excluded"; + String getGroupId(); String getArtifactId(); Index: maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java =================================================================== --- maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java (revision 1159034) +++ maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java (working copy) @@ -103,37 +103,6 @@ return resolved; } - /* - - Logic for transitve global exclusions - - List exclusions = new ArrayList(); - - for ( Dependency d : project.getDependencies() ) - { - if ( d.getExclusions() != null ) - { - for ( Exclusion e : d.getExclusions() ) - { - exclusions.add( e.getGroupId() + ":" + e.getArtifactId() ); - } - } - } - - ArtifactFilter scopeFilter = new ScopeArtifactFilter( scope ); - - ArtifactFilter filter; - - if ( ! exclusions.isEmpty() ) - { - filter = new AndArtifactFilter( Arrays.asList( new ArtifactFilter[]{ new ExcludesArtifactFilter( exclusions ), scopeFilter } ) ); - } - else - { - filter = scopeFilter; - } - */ - CumulativeScopeArtifactFilter resolutionScopeFilter = new CumulativeScopeArtifactFilter( scopesToResolve ); CumulativeScopeArtifactFilter collectionScopeFilter = new CumulativeScopeArtifactFilter( scopesToCollect ); Index: maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java =================================================================== --- maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java (revision 1159034) +++ maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java (working copy) @@ -15,6 +15,16 @@ * the License. */ +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.ArtifactUtils; @@ -31,14 +41,16 @@ import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.logging.Logger; +import org.sonatype.aether.collection.DependencySelector; import org.sonatype.aether.graph.Dependency; import org.sonatype.aether.graph.DependencyFilter; import org.sonatype.aether.graph.DependencyNode; +import org.sonatype.aether.util.DefaultRepositorySystemSession; import org.sonatype.aether.util.filter.AndDependencyFilter; import org.sonatype.aether.util.filter.ScopeDependencyFilter; +import org.sonatype.aether.util.graph.selector.AndDependencySelector; +import org.sonatype.aether.util.graph.selector.ExclusionDependencySelector; -import java.util.*; - /** * Resolves dependencies for the artifacts in context of the lifecycle build * @@ -114,6 +126,8 @@ } } + setExclusionsDependencySelector(session, getExclusions(project.getDependencies())); + Set artifacts = getDependencies( project, scopesToCollect, scopesToResolve, session, aggregating, projectArtifacts ); @@ -145,6 +159,41 @@ } } + private List getExclusions( Collection dependencies ) + { + List exclusions = new ArrayList(); + for ( org.apache.maven.model.Dependency dependency : dependencies ) + { + if ( "excluded".equals(dependency.getScope()) ) + { + exclusions.add(dependency); + } + } + return exclusions; + } + + private void setExclusionsDependencySelector( MavenSession session, List exclusions ) + { + final Set globalExclusions = new HashSet(); + for ( org.apache.maven.model.Dependency e : exclusions ) + { + globalExclusions.add(new org.sonatype.aether.graph.Exclusion(e.getGroupId(), e.getArtifactId(), e + .getClassifier(), "*")); + } + final DefaultRepositorySystemSession repositorySession = (DefaultRepositorySystemSession) session + .getRepositorySession(); + final DependencySelector selector = session.getRepositorySession().getDependencySelector(); + if ( selector != null ) + { + repositorySession.setDependencySelector(AndDependencySelector.newInstance(selector, + new ExclusionDependencySelector(globalExclusions))); + } + else + { + repositorySession.setDependencySelector(new ExclusionDependencySelector(globalExclusions)); + } + } + private Set getDependencies( MavenProject project, Collection scopesToCollect, Collection scopesToResolve, MavenSession session, boolean aggregating, Set projectArtifacts ) Index: maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java =================================================================== --- maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java (revision 1159034) +++ maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java (working copy) @@ -446,7 +446,7 @@ * In order to don't break backward-compat with those, only warn but don't error out. */ validateEnum( prefix + "scope", problems, Severity.WARNING, d.getScope(), d.getManagementKey(), d, - "provided", "compile", "runtime", "test", "system" ); + "provided", "compile", "runtime", "test", "system", "excluded" ); } } }