You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gb...@apache.org on 2018/02/19 23:43:16 UTC

[maven-assembly-plugin] branch MASSEMBLY-675 created (now 78faddf)

This is an automated email from the ASF dual-hosted git repository.

gboue pushed a change to branch MASSEMBLY-675
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git.


      at 78faddf  [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies

This branch includes the following new commits:

     new b0cf85d  [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies
     new 78faddf  [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
gboue@apache.org.

[maven-assembly-plugin] 02/02: [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies

Posted by gb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gboue pushed a commit to branch MASSEMBLY-675
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git

commit 78faddf88b1537bc5c61ba74cdb2b227416152b6
Author: Guillaume Boué <gb...@apache.org>
AuthorDate: Tue Feb 20 00:24:48 2018 +0100

    [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies
    
    Since Maven 3 requirement, there is no need to resolve any dependencies
    manually, and we can rely on requiresDependencyResolution. Initial patch
    failed when module sets were involved: instead of getting the list of
    transitive/direct dependencies on the current project, they need to be
    fetched for each project so that it encompasses the possible modules in
    module sets.
    
    All the dead code as a result of this change is removed.
    
    This closes #2.
---
 .../projects/dependency-sets/massembly-675/pom.xml |  69 +++
 .../massembly-675/src/main/assembly/bin.xml        |  28 +
 .../dependency-sets/massembly-675/verify.bsh       |  35 ++
 .../artifact/DefaultDependencyResolver.java        | 172 +-----
 .../artifact/ResolutionManagementInfo.java         |  60 ---
 .../artifact/DefaultDependencyResolverTest.java    | 584 +++------------------
 .../artifact/ResolutionManagementInfoTest.java     |   5 +-
 7 files changed, 240 insertions(+), 713 deletions(-)

diff --git a/src/it/projects/dependency-sets/massembly-675/pom.xml b/src/it/projects/dependency-sets/massembly-675/pom.xml
new file mode 100644
index 0000000..369030c
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-675/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.plugin.assembly.test</groupId>
+    <artifactId>it-project-parent</artifactId>
+    <version>1</version>
+  </parent>
+
+  <groupId>test</groupId>
+  <artifactId>massembly-675</artifactId>
+  <version>1</version>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>com.google.javascript</groupId>
+      <artifactId>closure-compiler</artifactId>
+      <version>v20131014</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>*</artifactId>
+          <groupId>*</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>${testVersion}</version>
+        <executions>
+          <execution>
+            <id>assembly</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/main/assembly/bin.xml</descriptor>
+              </descriptors>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/projects/dependency-sets/massembly-675/src/main/assembly/bin.xml b/src/it/projects/dependency-sets/massembly-675/src/main/assembly/bin.xml
new file mode 100644
index 0000000..6cf159c
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-675/src/main/assembly/bin.xml
@@ -0,0 +1,28 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<assembly>
+  <id>bin</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <dependencySets>
+    <dependencySet/>
+  </dependencySets>
+</assembly>
\ No newline at end of file
diff --git a/src/it/projects/dependency-sets/massembly-675/verify.bsh b/src/it/projects/dependency-sets/massembly-675/verify.bsh
new file mode 100644
index 0000000..f8a95ab
--- /dev/null
+++ b/src/it/projects/dependency-sets/massembly-675/verify.bsh
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.*;
+
+boolean result = true;
+
+result = result && new File( basedir, "target/massembly-675-1-bin/massembly-675-1.jar" ).exists();
+result = result && new File( basedir, "target/massembly-675-1-bin/closure-compiler-v20131014.jar" ).exists();
+
+// assert that all the transitive dependencies of closure-compiler were excluded
+result = result && !new File( basedir, "target/massembly-675-1-bin/args4j-2.0.16.jar" ).exists();
+result = result && !new File( basedir, "target/massembly-675-1-bin/json-20090211.jar" ).exists();
+result = result && !new File( basedir, "target/massembly-675-1-bin/protobuf-java-2.4.1.jar" ).exists();
+result = result && !new File( basedir, "target/massembly-675-1-bin/jsr305-1.3.9.jar" ).exists();
+result = result && !new File( basedir, "target/massembly-675-1-bin/guava-15.0.jar" ).exists();
+
+
+return result;
diff --git a/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
index 936e250..81a98cb 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
@@ -19,15 +19,12 @@ package org.apache.maven.plugins.assembly.artifact;
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugins.assembly.archive.phase.ModuleSetAssemblyPhase;
@@ -35,16 +32,8 @@ import org.apache.maven.plugins.assembly.model.Assembly;
 import org.apache.maven.plugins.assembly.model.DependencySet;
 import org.apache.maven.plugins.assembly.model.ModuleBinaries;
 import org.apache.maven.plugins.assembly.model.ModuleSet;
-import org.apache.maven.plugins.assembly.model.Repository;
-import org.apache.maven.plugins.assembly.resolved.AssemblyId;
-import org.apache.maven.plugins.assembly.utils.FilterUtils;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.RepositorySystem;
-import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
-import org.apache.maven.shared.artifact.resolve.ArtifactResult;
-import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -62,9 +51,6 @@ public class DefaultDependencyResolver
     @Requirement
     private RepositorySystem resolver;
     
-    @Requirement
-    private org.apache.maven.shared.dependencies.resolve.DependencyResolver dependencyResolver;
-
     @Override
     public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly, ModuleSet moduleSet,
                                                                     final AssemblerConfigurationSource configSource,
@@ -78,38 +64,16 @@ public class DefaultDependencyResolver
 
             final MavenProject currentProject = configSource.getProject();
 
-            final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject );
-            updateRepositoryResolutionRequirements( assembly, info );
-            final AssemblyId assemblyId = AssemblyId.createAssemblyId( assembly );
-            updateDependencySetResolutionRequirements( dependencySet, info, assemblyId,
-                                                       configSource.getMavenSession().getProjectBuildingRequest(),
-                                                       currentProject );
-            updateModuleSetResolutionRequirements( assemblyId, moduleSet, dependencySet, info, configSource );
+            final ResolutionManagementInfo info = new ResolutionManagementInfo();
+            updateDependencySetResolutionRequirements( dependencySet, info, currentProject );
+            updateModuleSetResolutionRequirements( moduleSet, dependencySet, info, configSource );
 
-            result.put( dependencySet, resolve( info, currentProject ) );
+            result.put( dependencySet, info.getArtifacts() );
 
         }
         return result;
     }
 
-    private Set<Artifact> resolve( ResolutionManagementInfo info, MavenProject project )
-    {
-        Set<Artifact> artifacts = new HashSet<>();
-        if ( info.isResolvedTransitively() )
-        {
-            getLogger().debug( "Resolving project dependencies transitively." );
-            artifacts = project.getArtifacts();
-        }
-        else
-        {
-            getLogger().debug( "Resolving project dependencies ONLY. "
-                + "Transitive dependencies WILL NOT be included in the results." );
-            artifacts = project.getDependencyArtifacts();
-        }
-
-        return artifacts;
-    }
-
     @Override
     public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly,
                                                                     final AssemblerConfigurationSource configSource,
@@ -123,41 +87,16 @@ public class DefaultDependencyResolver
 
             final MavenProject currentProject = configSource.getProject();
 
-            final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject );
-            updateRepositoryResolutionRequirements( assembly, info );
-            final AssemblyId assemblyId = AssemblyId.createAssemblyId( assembly );
-            updateDependencySetResolutionRequirements( dependencySet, info, assemblyId,
-                                                       configSource.getMavenSession().getProjectBuildingRequest(),
-                                                       currentProject );
+            final ResolutionManagementInfo info = new ResolutionManagementInfo();
+            updateDependencySetResolutionRequirements( dependencySet, info, currentProject );
 
-            result.put( dependencySet, resolve( info, currentProject ) );
+            result.put( dependencySet, info.getArtifacts() );
 
         }
         return result;
     }
 
-
-    void updateRepositoryResolutionRequirements( final Assembly assembly, final ResolutionManagementInfo requirements )
-    {
-        final List<Repository> repositories = assembly.getRepositories();
-
-        Set<String> rootScopes = new HashSet<String>();
-
-        if ( repositories != null && !repositories.isEmpty() )
-        {
-
-            requirements.setResolutionRequired( true );
-            for ( final Repository repo : repositories )
-            {
-                rootScopes.add( repo.getScope() );
-            }
-        }
-
-        requirements.setScopeFilter( FilterUtils.newScopeFilter( rootScopes ) );
-    }
-
-
-    void updateModuleSetResolutionRequirements( AssemblyId assemblyId, ModuleSet set, DependencySet dependencySet,
+    void updateModuleSetResolutionRequirements( ModuleSet set, DependencySet dependencySet,
                                                 final ResolutionManagementInfo requirements,
                                                 final AssemblerConfigurationSource configSource )
         throws DependencyResolutionException
@@ -176,47 +115,30 @@ public class DefaultDependencyResolver
                                                          e );
             }
 
-            if ( !projects.isEmpty() )
+            for ( final MavenProject p : projects )
             {
-                for ( final MavenProject p : projects )
+                if ( p.getArtifact() == null )
                 {
-                    requirements.enableProjectResolution( p );
-
-                    if ( p.getArtifact() == null )
-                    {
-                        // TODO: such a call in MavenMetadataSource too - packaging not really the intention of
-                        // type
-                        final Artifact artifact =
-                            resolver.createArtifact( p.getGroupId(), p.getArtifactId(), p.getVersion(),
-                                                     p.getPackaging() );
-                        p.setArtifact( artifact );
-                    }
+                    // TODO: such a call in MavenMetadataSource too - packaging not really the intention of type
+                    final Artifact artifact =
+                        resolver.createArtifact( p.getGroupId(), p.getArtifactId(), p.getVersion(), p.getPackaging() );
+                    p.setArtifact( artifact );
                 }
             }
 
             if ( binaries.isIncludeDependencies() )
             {
-                updateDependencySetResolutionRequirements( dependencySet, requirements, assemblyId,
-                                                           configSource.getMavenSession().getProjectBuildingRequest(),
+                updateDependencySetResolutionRequirements( dependencySet, requirements,
                                                            projects.toArray( new MavenProject[projects.size()] ) );
             }
         }
     }
 
     void updateDependencySetResolutionRequirements( final DependencySet set,
-                                                    final ResolutionManagementInfo requirements, AssemblyId assemblyId,
-                                                    ProjectBuildingRequest buildingRequest,
+                                                    final ResolutionManagementInfo requirements,
                                                     final MavenProject... projects )
         throws DependencyResolutionException
     {
-        requirements.setResolutionRequired( true );
-
-        requirements.setResolvedTransitively( set.isUseTransitiveDependencies() );
-
-        ScopeFilter scopeFilter = FilterUtils.newScopeFilter( set.getScope() );
-
-        requirements.setScopeFilter( scopeFilter );
-
         for ( final MavenProject project : projects )
         {
             if ( project == null )
@@ -224,30 +146,14 @@ public class DefaultDependencyResolver
                 continue;
             }
 
-            Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts();
-            if ( dependencyArtifacts == null )
+            Set<Artifact> dependencyArtifacts = null;
+            if ( set.isUseTransitiveDependencies() )
             {
-                try
-                {
-                    ProjectBuildingRequest pbr = new DefaultProjectBuildingRequest( buildingRequest );
-                    pbr.setRemoteRepositories( project.getRemoteArtifactRepositories() );
-                    Iterable<ArtifactResult> artifactResults =
-                        dependencyResolver.resolveDependencies( pbr, project.getModel(), scopeFilter );
-
-                    dependencyArtifacts = new HashSet<Artifact>();
-
-                    for ( ArtifactResult artifactResult : artifactResults )
-                    {
-                        dependencyArtifacts.add( artifactResult.getArtifact() );
-                    }
-
-                    project.setDependencyArtifacts( dependencyArtifacts );
-                }
-                catch ( final DependencyResolverException e )
-                {
-                    throw new DependencyResolutionException(
-                        "Failed to create dependency artifacts for resolution. Assembly: " + assemblyId, e );
-                }
+                dependencyArtifacts = project.getArtifacts();
+            }
+            else
+            {
+                dependencyArtifacts = project.getDependencyArtifacts();
             }
 
             requirements.addArtifacts( dependencyArtifacts );
@@ -256,36 +162,4 @@ public class DefaultDependencyResolver
         }
     }
 
-    List<ArtifactRepository> aggregateRemoteArtifactRepositories( final List<ArtifactRepository> remoteRepositories,
-                                                                  final Set<MavenProject> projects )
-    {
-        final List<List<ArtifactRepository>> repoLists = new ArrayList<List<ArtifactRepository>>();
-
-        repoLists.add( remoteRepositories );
-        for ( final MavenProject project : projects )
-        {
-            repoLists.add( project.getRemoteArtifactRepositories() );
-        }
-
-        final List<ArtifactRepository> remoteRepos = new ArrayList<ArtifactRepository>();
-        final Set<String> encounteredUrls = new HashSet<String>();
-
-        for ( final List<ArtifactRepository> repositoryList : repoLists )
-        {
-            if ( ( repositoryList != null ) && !repositoryList.isEmpty() )
-            {
-                for ( final ArtifactRepository repo : repositoryList )
-                {
-                    if ( !encounteredUrls.contains( repo.getUrl() ) )
-                    {
-                        remoteRepos.add( repo );
-                        encounteredUrls.add( repo.getUrl() );
-                    }
-                }
-            }
-        }
-
-        return remoteRepos;
-    }
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfo.java b/src/main/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfo.java
index 87d1e3d..59904a4 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfo.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfo.java
@@ -20,8 +20,6 @@ package org.apache.maven.plugins.assembly.artifact;
  */
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
@@ -34,66 +32,8 @@ import java.util.Set;
  */
 class ResolutionManagementInfo
 {
-    private ScopeFilter scopeFilter;
-
-    private final Set<MavenProject> enabledProjects = new LinkedHashSet<MavenProject>();
-
     private final LinkedHashSet<Artifact> artifacts = new LinkedHashSet<Artifact>();
 
-    private boolean resolutionRequired;
-
-    private boolean resolvedTransitively;
-
-    ResolutionManagementInfo( final MavenProject currentProject )
-    {
-        enabledProjects.add( currentProject );
-    }
-
-    boolean isResolutionRequired()
-    {
-        return resolutionRequired;
-    }
-
-    void setResolutionRequired( final boolean resolutionRequired )
-    {
-        this.resolutionRequired = resolutionRequired;
-    }
-
-    boolean isResolvedTransitively()
-    {
-        return resolvedTransitively;
-    }
-
-    void setResolvedTransitively( final boolean resolvedTransitively )
-    {
-        this.resolvedTransitively = this.resolvedTransitively || resolvedTransitively;
-    }
-
-    ScopeFilter getScopeFilter()
-    {
-        return scopeFilter;
-    }
-    
-    void setScopeFilter( ScopeFilter scopeFilter )
-    {
-        this.scopeFilter = scopeFilter;
-    }
-
-
-
-    void enableProjectResolution( final MavenProject project )
-    {
-        if ( !enabledProjects.contains( project ) )
-        {
-            enabledProjects.add( project );
-        }
-    }
-
-    Set<MavenProject> getEnabledProjects()
-    {
-        return enabledProjects;
-    }
-
     Set<Artifact> getArtifacts()
     {
         return artifacts;
diff --git a/src/test/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolverTest.java b/src/test/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolverTest.java
index 4d418b4..7b238c2 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolverTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolverTest.java
@@ -22,18 +22,16 @@ package org.apache.maven.plugins.assembly.artifact;
 import static org.easymock.EasyMock.expect;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.DefaultMavenExecutionResult;
 import org.apache.maven.execution.MavenExecutionRequest;
@@ -42,33 +40,18 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
 import org.apache.maven.plugin.testing.stubs.StubArtifactRepository;
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
-import org.apache.maven.plugins.assembly.model.Assembly;
 import org.apache.maven.plugins.assembly.model.DependencySet;
 import org.apache.maven.plugins.assembly.model.ModuleBinaries;
 import org.apache.maven.plugins.assembly.model.ModuleSet;
-import org.apache.maven.plugins.assembly.model.Repository;
-import org.apache.maven.plugins.assembly.resolved.AssemblyId;
-import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.internal.MavenRepositorySystemSession;
 import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.logging.console.ConsoleLogger;
 import org.easymock.classextension.EasyMockSupport;
-import org.sonatype.aether.RepositorySystemSession;
-import org.sonatype.aether.repository.LocalRepositoryManager;
 
 public class DefaultDependencyResolverTest
     extends PlexusTestCase
 {
 
-    private ArtifactFactory factory;
-
-    private ArtifactRepositoryFactory repoFactory;
-
-    private ArtifactRepositoryLayout layout;
-
     private DefaultDependencyResolver resolver;
 
     @Override
@@ -78,10 +61,6 @@ public class DefaultDependencyResolverTest
         super.setUp();
 
         resolver = (DefaultDependencyResolver) lookup( DependencyResolver.class );
-
-        factory = lookup( ArtifactFactory.class );
-        repoFactory = lookup( ArtifactRepositoryFactory.class );
-        layout = lookup( ArtifactRepositoryLayout.class, "default" );
     }
     
     protected MavenSession newMavenSession( MavenProject project )
@@ -100,41 +79,49 @@ public class DefaultDependencyResolverTest
     }
 
 
-    public void test_getDependencySetResolutionRequirements()
+    public void test_getDependencySetResolutionRequirements_transitive()
         throws DependencyResolutionException
     {
-        final DependencySet ds1 = new DependencySet();
-        ds1.setScope( Artifact.SCOPE_COMPILE );
-        ds1.setUseTransitiveDependencies( false );
-
-        final DependencySet ds2 = new DependencySet();
-        ds2.setScope( Artifact.SCOPE_SYSTEM );
-        ds2.setUseTransitiveDependencies( false );
+        final DependencySet ds = new DependencySet();
+        ds.setScope( Artifact.SCOPE_SYSTEM );
+        ds.setUseTransitiveDependencies( true );
 
         final MavenProject project = createMavenProject( "main-group", "main-artifact", "1", null );
 
-        final ResolutionManagementInfo info = new ResolutionManagementInfo( project );
+        Set<Artifact> dependencyArtifacts = new HashSet<>();
+        dependencyArtifacts.add( newArtifact( "g.id", "a-id", "1" ) );
+        Set<Artifact> artifacts = new HashSet<>( dependencyArtifacts );
+        artifacts.add( newArtifact( "g.id", "a-id-2", "2" ) );
+        project.setArtifacts( artifacts );
+        project.setDependencyArtifacts( dependencyArtifacts );
 
-        final Assembly assembly = new Assembly();
-        
-        ProjectBuildingRequest buildingRequest = newMavenSession( project ).getProjectBuildingRequest();
-        
-        resolver.updateDependencySetResolutionRequirements( ds1, info, AssemblyId.createAssemblyId( assembly ),
-                                                            buildingRequest, project );
+        final ResolutionManagementInfo info = new ResolutionManagementInfo();
+        resolver.updateDependencySetResolutionRequirements( ds, info, project );
+        assertEquals( artifacts, info.getArtifacts() );
+    }
 
-        assertTrue( info.isResolutionRequired() );
-        assertFalse( info.isResolvedTransitively() );
+    public void test_getDependencySetResolutionRequirements_nonTransitive()
+        throws DependencyResolutionException
+    {
+        final DependencySet ds = new DependencySet();
+        ds.setScope( Artifact.SCOPE_SYSTEM );
+        ds.setUseTransitiveDependencies( false );
 
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_COMPILE ) );
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_SYSTEM ) );
+        final MavenProject project = createMavenProject( "main-group", "main-artifact", "1", null );
 
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_PROVIDED ) );
+        Set<Artifact> dependencyArtifacts = new HashSet<>();
+        dependencyArtifacts.add( newArtifact( "g.id", "a-id", "1" ) );
+        Set<Artifact> artifacts = new HashSet<>( dependencyArtifacts );
+        artifacts.add( newArtifact( "g.id", "a-id-2", "2" ) );
+        project.setArtifacts( artifacts );
+        project.setDependencyArtifacts( dependencyArtifacts );
 
-        assertFalse( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_RUNTIME ) );
-        assertFalse( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_TEST ) );
+        final ResolutionManagementInfo info = new ResolutionManagementInfo();
+        resolver.updateDependencySetResolutionRequirements( ds, info, project );
+        assertEquals( dependencyArtifacts, info.getArtifacts() );
     }
 
-    public void test_getModuleSetResolutionRequirements()
+    public void test_getModuleSetResolutionRequirements_withoutBinaries()
         throws DependencyResolutionException
     {
         final EasyMockSupport mm = new EasyMockSupport();
@@ -143,484 +130,71 @@ public class DefaultDependencyResolverTest
 
         final File rootDir = new File( "root" );
         final MavenProject project = createMavenProject( "main-group", "main-artifact", "1", rootDir );
-
-        final File module1Dir = new File( rootDir, "module-1" );
-        final MavenProject module1 = createMavenProject( "main-group", "module-1", "1", module1Dir );
-        final MavenProject module1a =
-            createMavenProject( "group1", "module-1a", "1", new File( module1Dir, "module-1a" ) );
-        final MavenProject module1b =
-            createMavenProject( "group1.b", "module-1b", "1", new File( module1Dir, "module-1b" ) );
-
-        module1.getModel().addModule( module1a.getArtifactId() );
-        module1.getModel().addModule( module1b.getArtifactId() );
-
-        final File module2Dir = new File( rootDir, "module-2" );
-        final MavenProject module2 = createMavenProject( "main-group", "module-2", "1", module2Dir );
-        final MavenProject module2a =
-            createMavenProject( "main-group", "module-2a", "1", new File( module2Dir, "module-2a" ) );
-
-        module2.getModel().addModule( module2a.getArtifactId() );
+        final MavenProject module1 =
+            createMavenProject( "main-group", "module-1", "1", new File( rootDir, "module-1" ) );
+        final MavenProject module2 =
+            createMavenProject( "main-group", "module-2", "1", new File( rootDir, "module-2" ) );
 
         project.getModel().addModule( module1.getArtifactId() );
         project.getModel().addModule( module2.getArtifactId() );
 
-        final List<MavenProject> allProjects = new ArrayList<MavenProject>();
-        allProjects.add( project );
-        allProjects.add( module1 );
-        allProjects.add( module1a );
-        allProjects.add( module1b );
-        allProjects.add( module2 );
-        allProjects.add( module2a );
-        
-        expect( cs.getReactorProjects() ).andReturn( allProjects ).anyTimes();
-
+        expect( cs.getReactorProjects() ).andReturn( Arrays.asList( project, module1, module2 ) ).anyTimes();
         expect( cs.getProject() ).andReturn( project ).anyTimes();
-        
         expect( cs.getMavenSession() ).andReturn( newMavenSession( project ) ).anyTimes();
 
-        final ResolutionManagementInfo info = new ResolutionManagementInfo( project );
-
-        final List<ModuleSet> moduleSets = new ArrayList<ModuleSet>();
-
-        final ModuleSet ms1 = new ModuleSet();
-        final DependencySet ds1 = new DependencySet();
-        {
-            ms1.addInclude( "*module1*" );
-            ms1.setIncludeSubModules( false );
-
-            final ModuleBinaries mb = new ModuleBinaries();
-
-            ds1.setScope( Artifact.SCOPE_COMPILE );
-
-            mb.addDependencySet( ds1 );
-            ms1.setBinaries( mb );
-            moduleSets.add( ms1 );
-        }
-
-        final ModuleSet ms2 = new ModuleSet();
-        final DependencySet ds2 = new DependencySet();
-        {
-            ms2.addInclude( "main-group:*" );
-            ms2.setIncludeSubModules( true );
+        final ResolutionManagementInfo info = new ResolutionManagementInfo();
 
-            final ModuleBinaries mb = new ModuleBinaries();
-
-            ds2.setScope( Artifact.SCOPE_TEST );
-
-            mb.addDependencySet( ds2 );
-            ms2.setBinaries( mb );
-            moduleSets.add( ms2 );
-        }
+        final ModuleSet ms = new ModuleSet();
+        ms.setBinaries( null );
 
         mm.replayAll();
 
-        resolver.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
-
-        final Assembly assembly = new Assembly();
-        assembly.setModuleSets( moduleSets );
-
-        resolver.updateModuleSetResolutionRequirements( AssemblyId.createAssemblyId( assembly ), ms1, ds1, info, cs );
-        resolver.updateModuleSetResolutionRequirements( AssemblyId.createAssemblyId( assembly ), ms2, ds2, info, cs );
-
-        assertTrue( info.isResolutionRequired() );
-
-        final Set<MavenProject> enabledProjects = info.getEnabledProjects();
-        assertTrue( enabledProjects.contains( project ) );
-
-        assertTrue( enabledProjects.contains( module1 ) );
-
-        // these should be excluded since sub-modules are not traversable
-        assertFalse( enabledProjects.contains( module1a ) );
-        assertFalse( enabledProjects.contains( module1b ) );
-
-        assertTrue( enabledProjects.contains( module2 ) );
-        assertTrue( enabledProjects.contains( module2a ) );
-
-        // these are the two we directly set above.
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_TEST ) );
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_COMPILE ) );
-
-        // this combination should be implied by the two direct scopes set above.
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_RUNTIME ) );
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_PROVIDED ) );
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_SYSTEM ) );
+        resolver.updateModuleSetResolutionRequirements( ms, new DependencySet(), info, cs );
+        assertTrue( info.getArtifacts().isEmpty() );
 
         mm.verifyAll();
     }
 
-    public void test_getRepositoryResolutionRequirements()
+    public void test_getModuleSetResolutionRequirements_includeDeps()
+        throws DependencyResolutionException
     {
-        final List<Repository> repositories = new ArrayList<Repository>();
-
-        {
-            final Repository r = new Repository();
-            r.setScope( Artifact.SCOPE_COMPILE );
-            repositories.add( r );
-        }
-
-        {
-            final Repository r = new Repository();
-            r.setScope( Artifact.SCOPE_SYSTEM );
-            repositories.add( r );
-        }
-
-        final MavenProject project = createMavenProject( "group", "artifact", "1.0", null );
-        final Assembly assembly = new Assembly();
-        assembly.setRepositories( repositories );
-
-        final ResolutionManagementInfo info = new ResolutionManagementInfo( project );
-        resolver.updateRepositoryResolutionRequirements( assembly,
-                                                                                                           info );
-
-        assertTrue( info.isResolutionRequired() );
-
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_COMPILE ) );
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_SYSTEM ) );
-
-        assertTrue( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_PROVIDED ) );
-
-        assertFalse( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_RUNTIME ) );
-        assertFalse( info.getScopeFilter().getIncluded().contains( Artifact.SCOPE_TEST ) );
-    }
+        final EasyMockSupport mm = new EasyMockSupport();
 
-    public void test_aggregateRemoteArtifactRepositories()
-    {
-        final List<ArtifactRepository> externalRepos = new ArrayList<ArtifactRepository>();
+        final AssemblerConfigurationSource cs = mm.createMock( AssemblerConfigurationSource.class );
 
-        final ArtifactRepository er1 =
-            repoFactory.createArtifactRepository( "test.1", "http://test.com/path", layout, null, null );
-        externalRepos.add( er1 );
+        final File rootDir = new File( "root" );
+        final MavenProject project = createMavenProject( "main-group", "main-artifact", "1", rootDir );
+        final MavenProject module1 =
+            createMavenProject( "main-group", "module-1", "1", new File( rootDir, "module-1" ) );
+        final MavenProject module2 =
+            createMavenProject( "main-group", "module-2", "1", new File( rootDir, "module-2" ) );
 
-        final ArtifactRepository er2 =
-            repoFactory.createArtifactRepository( "test.2", "http://test2.com/path", layout, null, null );
-        externalRepos.add( er2 );
+        Set<Artifact> module1Artifacts = Collections.singleton( newArtifact( "group.id", "module-1-dep", "1" ) );
+        Set<Artifact> module2Artifacts = Collections.singleton( newArtifact( "group.id", "module-2-dep", "1" ) );
+        module1.setArtifacts( module1Artifacts );
+        module2.setArtifacts( module2Artifacts );
 
-        final List<ArtifactRepository> projectRepos = new ArrayList<ArtifactRepository>();
+        project.getModel().addModule( module1.getArtifactId() );
+        project.getModel().addModule( module2.getArtifactId() );
 
-        final ArtifactRepository pr1 =
-            repoFactory.createArtifactRepository( "project.1", "http://test.com/project", layout, null, null );
-        projectRepos.add( pr1 );
+        expect( cs.getReactorProjects() ).andReturn( Arrays.asList( project, module1, module2 ) ).anyTimes();
+        expect( cs.getProject() ).andReturn( project ).anyTimes();
+        expect( cs.getMavenSession() ).andReturn( newMavenSession( project ) ).anyTimes();
 
-        final ArtifactRepository pr2 =
-            repoFactory.createArtifactRepository( "project.2", "http://test2.com/path", layout, null, null );
-        projectRepos.add( pr2 );
+        final ResolutionManagementInfo info = new ResolutionManagementInfo();
 
-        final MavenProject project = createMavenProject( "group", "artifact", "1", new File( "base" ) );
-        project.setRemoteArtifactRepositories( projectRepos );
+        final ModuleSet ms = new ModuleSet();
+        final ModuleBinaries mb = new ModuleBinaries();
+        mb.setIncludeDependencies( true );
+        ms.setBinaries( mb );
+        ms.addInclude( "*:module-1" );
 
-        final List<ArtifactRepository> aggregated =
-            resolver.aggregateRemoteArtifactRepositories( externalRepos, Collections.singleton( project ) );
+        mm.replayAll();
 
-        assertRepositoryWithId( er1.getId(), aggregated, true );
-        assertRepositoryWithId( er2.getId(), aggregated, true );
-        assertRepositoryWithId( pr1.getId(), aggregated, true );
-        assertRepositoryWithId( pr2.getId(), aggregated, false );
-    }
+        resolver.updateModuleSetResolutionRequirements( ms, new DependencySet(), info, cs );
+        assertEquals( module1Artifacts, info.getArtifacts() );
 
-    // public void test_manageArtifact()
-    // {
-    // Artifact managed = factory.createArtifact( "group", "artifact", "1", Artifact.SCOPE_PROVIDED, "jar" );
-    //
-    // Artifact target =
-    // factory.createArtifact( managed.getGroupId(), managed.getArtifactId(), "2", Artifact.SCOPE_COMPILE,
-    // managed.getType() );
-    //
-    // Artifact target2 =
-    // factory.createArtifact( "other-group", managed.getArtifactId(), "2", Artifact.SCOPE_COMPILE,
-    // managed.getType() );
-    //
-    // Map managedVersions = Collections.singletonMap( managed.getDependencyConflictId(), managed );
-    //
-    // DefaultDependencyResolver resolver =
-    // new DefaultDependencyResolver().setLogger( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
-    //
-    // resolver.manageArtifact( target, managedVersions );
-    // resolver.manageArtifact( target2, managedVersions );
-    //
-    // assertEquals( managed.getVersion(), target.getVersion() );
-    // assertEquals( managed.getScope(), target.getScope() );
-    //
-    // assertEquals( "2", target2.getVersion() );
-    // assertEquals( Artifact.SCOPE_COMPILE, target2.getScope() );
-    // }
-
-    // public void test_buildManagedVersionMap_NonTransitiveResolution()
-    // throws ArtifactResolutionException, ArchiveCreationException, InvalidVersionSpecificationException,
-    // InvalidDependencyVersionException
-    // {
-    // Assembly assembly = new Assembly();
-    //
-    // DependencySet ds = new DependencySet();
-    // ds.setScope( Artifact.SCOPE_PROVIDED );
-    // ds.setUseTransitiveDependencies( false );
-    //
-    // assembly.addDependencySet( ds );
-    //
-    // ModuleSet ms = new ModuleSet();
-    // ModuleBinaries mb = new ModuleBinaries();
-    // ms.setBinaries( mb );
-    //
-    // DependencySet mds = new DependencySet();
-    // mds.setScope( Artifact.SCOPE_PROVIDED );
-    // mds.setUseTransitiveDependencies( false );
-    //
-    // mb.addDependencySet( mds );
-    //
-    // assembly.addModuleSet( ms );
-    //
-    // MavenProject project = createMavenProject( "group", "artifact", "1", new File( "base" ) );
-    //
-    // Dependency d1 = new Dependency();
-    // d1.setGroupId( "group.dep" );
-    // d1.setArtifactId( "dep1" );
-    // d1.setVersion( "1" );
-    // d1.setScope( Artifact.SCOPE_COMPILE );
-    //
-    // project.getModel().addDependency( d1 );
-    //
-    // Dependency d2 = new Dependency();
-    // d2.setGroupId( "group.dep" );
-    // d2.setArtifactId( "dep2" );
-    // d2.setVersion( "1" );
-    // d2.setScope( Artifact.SCOPE_PROVIDED );
-    //
-    // project.getModel().addDependency( d2 );
-    //
-    // Dependency d3 = new Dependency();
-    // d3.setGroupId( "group.dep" );
-    // d3.setArtifactId( "dep3" );
-    // d3.setVersion( "1" );
-    // d3.setScope( Artifact.SCOPE_PROVIDED );
-    //
-    // project.getModel().addDependency( d3 );
-    //
-    // MavenProject module = createMavenProject( "group", "module", "1", new File( "base/module" ) );
-    //
-    // project.getModel().addModule( module.getArtifactId() );
-    //
-    // Dependency md = new Dependency();
-    // md.setGroupId( "group.dep" );
-    // md.setArtifactId( "dep3" );
-    // md.setVersion( "2" );
-    // md.setScope( Artifact.SCOPE_PROVIDED );
-    //
-    // module.getModel().addDependency( md );
-    //
-    // List allProjects = new ArrayList();
-    // allProjects.add( project );
-    // allProjects.add( module );
-    //
-    // MockManager mm = new MockManager();
-    //
-    // MockControl csControl = MockControl.createControl( AssemblerConfigurationSource.class );
-    // mm.add( csControl );
-    //
-    // AssemblerConfigurationSource cs = (AssemblerConfigurationSource) csControl.getMock();
-    //
-    // cs.getProject();
-    // csControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
-    //
-    // cs.getReactorProjects();
-    // csControl.setReturnValue( allProjects, MockControl.ZERO_OR_MORE );
-    //
-    // cs.getRemoteRepositories();
-    // csControl.setReturnValue( Collections.EMPTY_LIST, MockControl.ZERO_OR_MORE );
-    //
-    // mm.replayAll();
-    //
-    // DefaultDependencyResolver resolver = new DefaultDependencyResolver();
-    // resolver.setArtifactFactory( factory );
-    // resolver.setLogger( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
-    //
-    // Map managedVersionMap = resolver.buildManagedVersionMap( assembly, cs );
-    //
-    // {
-    // Dependency d = d1;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNull( a );
-    // }
-    //
-    // {
-    // Dependency d = d2;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNotNull( a );
-    // assertEquals( d.getVersion(), a.getVersion() );
-    // assertEquals( d.getScope(), a.getScope() );
-    // }
-    //
-    // {
-    // Dependency d = d3;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNotNull( a );
-    // assertEquals( d.getVersion(), a.getVersion() );
-    // assertEquals( d.getScope(), a.getScope() );
-    // }
-    //
-    // mm.verifyAll();
-    // }
-    //
-    // public void test_buildManagedVersionMap_TransitiveResolution()
-    // throws ArtifactResolutionException, ArchiveCreationException, InvalidVersionSpecificationException,
-    // InvalidDependencyVersionException
-    // {
-    // Assembly assembly = new Assembly();
-    //
-    // DependencySet ds = new DependencySet();
-    // ds.setScope( Artifact.SCOPE_COMPILE );
-    // ds.setUseTransitiveDependencies( true );
-    //
-    // assembly.addDependencySet( ds );
-    //
-    // MavenProject project = createMavenProject( "group", "artifact", "1", new File( "base" ) );
-    //
-    // Dependency d1 = new Dependency();
-    // d1.setGroupId( "group.dep" );
-    // d1.setArtifactId( "dep1" );
-    // d1.setVersion( "1" );
-    // d1.setScope( Artifact.SCOPE_COMPILE );
-    //
-    // project.getModel().addDependency( d1 );
-    //
-    // Dependency d2 = new Dependency();
-    // d2.setGroupId( "group.dep" );
-    // d2.setArtifactId( "dep2" );
-    // d2.setVersion( "1" );
-    // d2.setScope( Artifact.SCOPE_COMPILE );
-    // final Artifact a2 = factory.createArtifact( d2.getGroupId(), d2.getArtifactId(), d2.getVersion(), d2.getScope(),
-    // "jar" );
-    //
-    // project.getModel().addDependency( d2 );
-    //
-    // Dependency d3 = new Dependency();
-    // d3.setGroupId( "group.dep" );
-    // d3.setArtifactId( "dep3" );
-    // d3.setVersion( "1" );
-    // d3.setScope( Artifact.SCOPE_COMPILE );
-    //
-    // project.getModel().addDependency( d3 );
-    //
-    // final Artifact a2a = factory.createArtifact( d3.getGroupId(), d3.getArtifactId(), "2", Artifact.SCOPE_RUNTIME,
-    // "jar" );
-    //
-    // MockManager mm = new MockManager();
-    //
-    // MockControl msControl = MockControl.createControl( ArtifactMetadataSource.class );
-    // mm.add( msControl );
-    //
-    // ArtifactMetadataSource ms = (ArtifactMetadataSource) msControl.getMock();
-    //
-    // try
-    // {
-    // ms.retrieve( null, null, null );
-    // }
-    // catch ( ArtifactMetadataRetrievalException e )
-    // {
-    // }
-    //
-    // msControl.setDefaultReturnValue( new ResolutionGroup( null, Collections.EMPTY_SET, Collections.EMPTY_LIST ) );
-    // msControl.setMatcher( new ArgumentsMatcher()
-    // {
-    // public boolean matches( Object[] expected, Object[] actual )
-    // {
-    // Artifact a = (Artifact) actual[0];
-    //
-    // return a2.getArtifactId().equals( a.getArtifactId() );
-    // }
-    //
-    // public String toString( Object[] args )
-    // {
-    // return "with artifact: " + args[0] ;
-    // }
-    //
-    // } );
-    // msControl.setReturnValue( new ResolutionGroup( a2, Collections.singleton( a2a ), Collections.EMPTY_LIST ) );
-    //
-    //
-    // MockControl csControl = MockControl.createControl( AssemblerConfigurationSource.class );
-    // mm.add( csControl );
-    //
-    // AssemblerConfigurationSource cs = (AssemblerConfigurationSource) csControl.getMock();
-    //
-    // cs.getProject();
-    // csControl.setReturnValue( project, MockControl.ZERO_OR_MORE );
-    //
-    // String tmpDir = System.getProperty( "java.io.tmpdir" );
-    // ArtifactRepository lr = repoFactory.createArtifactRepository( "local", "file://" + tmpDir, layout, null, null );
-    //
-    // cs.getLocalRepository();
-    // csControl.setReturnValue( lr, MockControl.ZERO_OR_MORE );
-    //
-    // cs.getRemoteRepositories();
-    // csControl.setReturnValue( Collections.EMPTY_LIST, MockControl.ZERO_OR_MORE );
-    //
-    // mm.replayAll();
-    //
-    // DefaultDependencyResolver resolver = new DefaultDependencyResolver();
-    // resolver.setArtifactMetadataSource( ms );
-    // resolver.setArtifactCollector( collector );
-    // resolver.setArtifactFactory( factory );
-    // resolver.setLogger( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
-    //
-    // Map managedVersionMap = resolver.buildManagedVersionMap( assembly, cs );
-    //
-    // {
-    // Dependency d = d1;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNotNull( a );
-    // assertEquals( d.getVersion(), a.getVersion() );
-    // assertEquals( d.getScope(), a.getScope() );
-    // }
-    //
-    // {
-    // Dependency d = d2;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNotNull( a );
-    // assertEquals( d.getVersion(), a.getVersion() );
-    // assertEquals( d.getScope(), a.getScope() );
-    // }
-    //
-    // {
-    // Dependency d = d3;
-    // Artifact a = (Artifact) managedVersionMap.get( d.getManagementKey() );
-    // assertNotNull( a );
-    // assertEquals( d.getVersion(), a.getVersion() );
-    // assertEquals( d.getScope(), a.getScope() );
-    // }
-    //
-    // mm.verifyAll();
-    // }
-
-    private void assertRepositoryWithId( final String repoId, final List<ArtifactRepository> repos,
-                                         final boolean shouldExist )
-    {
-        if ( ( repos == null || repos.isEmpty() ) )
-        {
-            if ( shouldExist )
-            {
-                fail( "Repository with id: " + repoId + " should be present, but repository list is null or empty." );
-            }
-        }
-        else
-        {
-            boolean found = false;
-            for ( final ArtifactRepository repo : repos )
-            {
-                if ( repoId.equals( repo.getId() ) )
-                {
-                    found = true;
-                    break;
-                }
-            }
-
-            if ( shouldExist )
-            {
-                assertTrue( "Repository with id: " + repoId + " should be present in repository list.", found );
-            }
-            else
-            {
-                assertFalse( "Repository with id: " + repoId + " should NOT be present in repository list.", found );
-            }
-        }
+        mm.verifyAll();
     }
 
     private MavenProject createMavenProject( final String groupId, final String artifactId, final String version,
@@ -635,12 +209,20 @@ public class DefaultDependencyResolverTest
 
         final MavenProject project = new MavenProject( model );
 
-        final Artifact pomArtifact = factory.createProjectArtifact( groupId, artifactId, version );
+        final Artifact pomArtifact = newArtifact( groupId, artifactId, version );
         project.setArtifact( pomArtifact );
+        project.setArtifacts( new HashSet<Artifact>() );
+        project.setDependencyArtifacts( new HashSet<Artifact>() );
 
         project.setFile( new File( basedir, "pom.xml" ) );
 
         return project;
     }
 
+    private Artifact newArtifact( final String groupId, final String artifactId, final String version )
+    {
+        return new DefaultArtifact( groupId, artifactId, VersionRange.createFromVersion( version ), "compile", "jar",
+                                    null, new DefaultArtifactHandler() );
+    }
+
 }
diff --git a/src/test/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfoTest.java b/src/test/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfoTest.java
index ede62bc..86c2b71 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfoTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/artifact/ResolutionManagementInfoTest.java
@@ -24,7 +24,6 @@ import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
 import org.apache.maven.artifact.versioning.VersionRange;
-import org.apache.maven.project.MavenProject;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -43,7 +42,7 @@ public class ResolutionManagementInfoTest
     public void testAddSingleArtifactWithReplacemen()
         throws Exception
     {
-        ResolutionManagementInfo rmi = new ResolutionManagementInfo( new MavenProject() );
+        ResolutionManagementInfo rmi = new ResolutionManagementInfo();
         Artifact a1 = new DefaultArtifact( "groupid", "1", VersionRange.createFromVersion( "1.0" ), "test", "jar", null,
                                            new DefaultArtifactHandler() );
         rmi.addArtifacts( Collections.singleton( a1 ) );
@@ -59,7 +58,7 @@ public class ResolutionManagementInfoTest
     public void testAddMultiArtifactWithReplacemen()
         throws Exception
     {
-        ResolutionManagementInfo rmi = new ResolutionManagementInfo( new MavenProject() );
+        ResolutionManagementInfo rmi = new ResolutionManagementInfo();
         Artifact a1 =
             new DefaultArtifact( "groupid", "a1", VersionRange.createFromVersion( "1.0" ), "test", "jar", null,
                                  new DefaultArtifactHandler() );

-- 
To stop receiving notification emails like this one, please contact
gboue@apache.org.

[maven-assembly-plugin] 01/02: [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies

Posted by gb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gboue pushed a commit to branch MASSEMBLY-675
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git

commit b0cf85db9c466d42a4d39f46634ad49cbb784d8c
Author: Hilario Fernandes <hi...@hitachivantara.com>
AuthorDate: Fri Feb 2 18:58:31 2018 +0000

    [MASSEMBLY-675] Maven Assembly packaging wildcard-excluded dependencies
    
    Require maven to solve dependencies instead of building requests, fixing wildcard exclusion problem
---
 .../artifact/DefaultDependencyResolver.java        | 141 +++------------------
 .../plugins/assembly/mojos/SingleAssemblyMojo.java |   2 +-
 2 files changed, 18 insertions(+), 125 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java b/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
index 741b19d..936e250 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/artifact/DefaultDependencyResolver.java
@@ -20,20 +20,14 @@ package org.apache.maven.plugins.assembly.artifact;
  */
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.MultipleArtifactsNotFoundException;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
 import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
 import org.apache.maven.plugins.assembly.archive.phase.ModuleSetAssemblyPhase;
@@ -49,7 +43,6 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.apache.maven.repository.RepositorySystem;
 import org.apache.maven.shared.artifact.filter.resolve.ScopeFilter;
-import org.apache.maven.shared.artifact.filter.resolve.transform.ArtifactIncludeFilterTransformer;
 import org.apache.maven.shared.artifact.resolve.ArtifactResult;
 import org.apache.maven.shared.dependencies.resolve.DependencyResolverException;
 import org.codehaus.plexus.component.annotations.Component;
@@ -93,43 +86,28 @@ public class DefaultDependencyResolver
                                                        currentProject );
             updateModuleSetResolutionRequirements( assemblyId, moduleSet, dependencySet, info, configSource );
 
-            resolve( assembly, configSource, result, dependencySet, info );
+            result.put( dependencySet, resolve( info, currentProject ) );
 
         }
         return result;
     }
 
-    private void resolve( Assembly assembly, AssemblerConfigurationSource configSource,
-                          Map<DependencySet, Set<Artifact>> result, DependencySet dependencySet,
-                          ResolutionManagementInfo info )
-        throws DependencyResolutionException
+    private Set<Artifact> resolve( ResolutionManagementInfo info, MavenProject project )
     {
-        Set<Artifact> artifacts;
-        if ( info.isResolutionRequired() )
+        Set<Artifact> artifacts = new HashSet<>();
+        if ( info.isResolvedTransitively() )
         {
-            final List<ArtifactRepository> repos =
-                aggregateRemoteArtifactRepositories( configSource.getRemoteRepositories(), info.getEnabledProjects() );
-
-            artifacts = info.getArtifacts();
-            if ( info.isResolvedTransitively() )
-            {
-                getLogger().debug( "Resolving project dependencies transitively." );
-                
-                ArtifactFilter filter = new ArtifactIncludeFilterTransformer().transform( info.getScopeFilter() );
-                artifacts = resolveTransitively( artifacts, repos, filter, configSource );
-            }
-            else
-            {
-                getLogger().debug( "Resolving project dependencies ONLY. "
-                                       + "Transitive dependencies WILL NOT be included in the results." );
-                artifacts = resolveNonTransitively( assembly, artifacts, configSource, repos );
-            }
+            getLogger().debug( "Resolving project dependencies transitively." );
+            artifacts = project.getArtifacts();
         }
         else
         {
-            artifacts = new HashSet<Artifact>();
+            getLogger().debug( "Resolving project dependencies ONLY. "
+                + "Transitive dependencies WILL NOT be included in the results." );
+            artifacts = project.getDependencyArtifacts();
         }
-        result.put( dependencySet, artifacts );
+
+        return artifacts;
     }
 
     @Override
@@ -152,114 +130,29 @@ public class DefaultDependencyResolver
                                                        configSource.getMavenSession().getProjectBuildingRequest(),
                                                        currentProject );
 
-            resolve( assembly, configSource, result, dependencySet, info );
+            result.put( dependencySet, resolve( info, currentProject ) );
 
         }
         return result;
     }
 
-    Set<Artifact> resolveNonTransitively( final Assembly assembly, final Set<Artifact> dependencyArtifacts,
-                                          final AssemblerConfigurationSource configSource,
-                                          final List<ArtifactRepository> repos )
-        throws DependencyResolutionException
-    {
-
-        final List<Artifact> missing = new ArrayList<Artifact>();
-        final Set<Artifact> resolved = new LinkedHashSet<Artifact>();
-        for ( final Artifact depArtifact : dependencyArtifacts )
-        {
-            ArtifactResolutionRequest req = new ArtifactResolutionRequest();
-            req.setLocalRepository( configSource.getLocalRepository() );
-            req.setRemoteRepositories( repos );
-            req.setArtifact( depArtifact );
-
-            ArtifactResolutionResult resolve = resolver.resolve( req );
-            if ( resolve.hasExceptions() )
-            {
-                if ( getLogger().isDebugEnabled() )
-                {
-                    getLogger().debug(
-                        "Failed to resolve: " + depArtifact.getId() + " for assembly: " + assembly.getId() );
-                }
-                missing.add( depArtifact );
-            }
-            else
-            {
-                resolved.add( depArtifact );
-            }
-        }
-
-        if ( !missing.isEmpty() )
-
-        {
-            final MavenProject project = configSource.getProject();
-            final Artifact rootArtifact = project.getArtifact();
-
-            final Throwable error =
-                new MultipleArtifactsNotFoundException( rootArtifact, new ArrayList<Artifact>( resolved ), missing,
-                                                        repos );
-
-            throw new DependencyResolutionException( "Failed to resolve dependencies for: " + assembly.getId(), error );
-        }
-
-        return resolved;
-    }
-
-    private Set<Artifact> resolveTransitively( final Set<Artifact> dependencyArtifacts,
-                                               final List<ArtifactRepository> repos,
-                                               final ArtifactFilter filter,
-                                               final AssemblerConfigurationSource configSource )
-        throws DependencyResolutionException
-    {
-        final MavenProject project = configSource.getProject();
-
-        ArtifactResolutionRequest req = new ArtifactResolutionRequest();
-        req.setLocalRepository( configSource.getLocalRepository() );
-        req.setResolveRoot( false );
-        req.setRemoteRepositories( repos );
-        req.setResolveTransitively( true );
-        req.setArtifact( project.getArtifact() );
-        req.setArtifactDependencies( dependencyArtifacts );
-        req.setManagedVersionMap( project.getManagedVersionMap() );
-        req.setCollectionFilter( filter );
-        req.setOffline( configSource.getMavenSession().isOffline() );
-        req.setForceUpdate( configSource.getMavenSession().getRequest().isUpdateSnapshots() );
-        req.setServers( configSource.getMavenSession().getRequest().getServers() );
-        req.setMirrors( configSource.getMavenSession().getRequest().getMirrors() );
-        req.setProxies( configSource.getMavenSession().getRequest().getProxies() );
-
-        ArtifactResolutionResult result;
-
-        result = resolver.resolve( req );
-        if ( result.hasExceptions() )
-        {
-            throw new DependencyResolutionException( "Failed to resolve dependencies for assembly: ",
-                                                     result.getExceptions().get( 0 ) );
-        }
-
-        getLogger().debug( "While resolving dependencies of " + project.getId() + ":" );
-
-        FilterUtils.reportFilteringStatistics( Collections.singleton( filter ), getLogger() );
-
-        return result.getArtifacts();
-    }
 
     void updateRepositoryResolutionRequirements( final Assembly assembly, final ResolutionManagementInfo requirements )
     {
         final List<Repository> repositories = assembly.getRepositories();
 
         Set<String> rootScopes = new HashSet<String>();
-        
+
         if ( repositories != null && !repositories.isEmpty() )
         {
-            
+
             requirements.setResolutionRequired( true );
             for ( final Repository repo : repositories )
             {
                 rootScopes.add( repo.getScope() );
             }
         }
-        
+
         requirements.setScopeFilter( FilterUtils.newScopeFilter( rootScopes ) );
     }
 
@@ -321,9 +214,9 @@ public class DefaultDependencyResolver
         requirements.setResolvedTransitively( set.isUseTransitiveDependencies() );
 
         ScopeFilter scopeFilter = FilterUtils.newScopeFilter( set.getScope() );
-        
+
         requirements.setScopeFilter( scopeFilter );
-        
+
         for ( final MavenProject project : projects )
         {
             if ( project == null )
diff --git a/src/main/java/org/apache/maven/plugins/assembly/mojos/SingleAssemblyMojo.java b/src/main/java/org/apache/maven/plugins/assembly/mojos/SingleAssemblyMojo.java
index 1d8d843..2e33b90 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/mojos/SingleAssemblyMojo.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/mojos/SingleAssemblyMojo.java
@@ -41,7 +41,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  * @version $Id$
  */
-@Mojo( name = "single", inheritByDefault = false, requiresDependencyResolution = ResolutionScope.COMPILE,
+@Mojo( name = "single", inheritByDefault = false, requiresDependencyResolution = ResolutionScope.TEST,
     threadSafe = true )
 public class SingleAssemblyMojo
     extends AbstractAssemblyMojo

-- 
To stop receiving notification emails like this one, please contact
gboue@apache.org.