Author: krosenvold Date: Mon Nov 3 18:28:08 2014 New Revision: 1636414 URL: http://svn.apache.org/r1636414 Log: [MASSEMBLY-619] Fixed bleed between resolution phases for multiple dependency sets
Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/assembly.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/invoker.properties maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/verify.bsh Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/assembly.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/assembly.xml?rev=1636414&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/assembly.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/assembly.xml Mon Nov 3 18:28:08 2014 @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +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 + xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> + + <id>deploy-zip</id> + <formats> + <format>zip</format> + </formats> + + <dependencySets> + <dependencySet> + <outputDirectory>dir1</outputDirectory> + <includes> + <include>commons-configuration:commons-configuration</include> + </includes> + </dependencySet> + <dependencySet> + <outputDirectory>dir2</outputDirectory> + <useTransitiveDependencies>false</useTransitiveDependencies> + <excludes> + <exclude>commons-configuration:commons-configuration</exclude> + </excludes> + </dependencySet> + </dependencySets> + +</assembly> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/invoker.properties URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/invoker.properties?rev=1636414&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/invoker.properties (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/invoker.properties Mon Nov 3 18:28:08 2014 @@ -0,0 +1,18 @@ +# 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. + +invoker.goals=install Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/pom.xml?rev=1636414&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/pom.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/pom.xml Mon Nov 3 18:28:08 2014 @@ -0,0 +1,64 @@ +<!-- +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/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <name>bug-test</name> + <groupId>com.example.assembly</groupId> + <artifactId>bug-test</artifactId> + <version>1.0-SNAPSHOT</version> + + <dependencies> + <dependency> + <groupId>commons-configuration</groupId> + <artifactId>commons-configuration</artifactId> + <version>1.10</version> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-archiver</artifactId> + <version>2.6</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <version>${testVersion}</version> + <executions> + <execution> + <id>make-assembly</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + <configuration> + <descriptors> + <descriptor>assembly.xml</descriptor> + </descriptors> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/verify.bsh?rev=1636414&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/verify.bsh (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-619/verify.bsh Mon Nov 3 18:28:08 2014 @@ -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.*; +import java.util.zip.*; + +ZipFile zf = new ZipFile( new File( basedir, "target/bug-test-1.0-SNAPSHOT-deploy-zip.zip" ) ); + +ZipEntry child1InclEntry = zf.getEntry( "bug-test-1.0-SNAPSHOT/dir2/classworlds-1.1.jar" ); + +if ( child1InclEntry != null ) +{ + System.out.println( "Unexpected file in jar !" ); + return false; +} + +return true; + + Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhase.java Mon Nov 3 18:28:08 2014 @@ -28,6 +28,7 @@ import org.apache.maven.plugin.assembly. import org.apache.maven.plugin.assembly.artifact.DependencyResolver; import org.apache.maven.plugin.assembly.format.AssemblyFormattingException; import org.apache.maven.plugin.assembly.model.Assembly; +import org.apache.maven.plugin.assembly.model.DependencySet; import org.apache.maven.project.MavenProjectBuilder; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.manager.ArchiverManager; @@ -36,6 +37,8 @@ import org.codehaus.plexus.component.ann import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger; +import java.util.Collections; +import java.util.Map; import java.util.Set; /** @@ -87,11 +90,15 @@ public class DependencySetAssemblyPhase DependencyResolutionException { - Set<Artifact> resolved = dependencyResolver.resolve( assembly, configSource ); - final AddDependencySetsTask task = - new AddDependencySetsTask( assembly.getDependencySets(), resolved, configSource.getProject(), - projectBuilder, getLogger() ); + Map<DependencySet, Set<Artifact>> + resolved = dependencyResolver.resolveDependencySets( assembly, configSource, assembly.getDependencySets() ); + for ( Map.Entry<DependencySet, Set<Artifact>> dependencySetSetEntry : resolved.entrySet() ) + { + final AddDependencySetsTask task = + new AddDependencySetsTask( Collections.singletonList(dependencySetSetEntry.getKey()), dependencySetSetEntry.getValue(), configSource.getProject(), + projectBuilder, getLogger() ); - task.execute( archiver, configSource ); + task.execute( archiver, configSource ); + } } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhase.java Mon Nov 3 18:28:08 2014 @@ -231,7 +231,9 @@ public class ModuleSetAssemblyPhase if ( depSets != null ) { - Set<Artifact> resolved = dependencyResolver.resolve( assembly, moduleSet, configSource ); + Map<DependencySet, Set<Artifact>> dependencySetSetMap = + dependencyResolver.resolveDependencySets( assembly, moduleSet, configSource, + depSets); for ( final DependencySet ds : depSets ) { @@ -261,16 +263,21 @@ public class ModuleSetAssemblyPhase { getLogger().debug( "Processing binary dependencies for module project: " + moduleProject.getId() ); - final AddDependencySetsTask task = - new AddDependencySetsTask( depSets, resolved, moduleProject, projectBuilder, - getLogger() ); - - task.setModuleProject( moduleProject ); - task.setModuleArtifact( chosenModuleArtifacts.get( moduleProject ) ); - task.setDefaultOutputDirectory( binaries.getOutputDirectory() ); - task.setDefaultOutputFileNameMapping( binaries.getOutputFileNameMapping() ); + for ( Map.Entry<DependencySet, Set<Artifact>> dependencySetSetEntry : dependencySetSetMap.entrySet() ) + { + final AddDependencySetsTask task = + new AddDependencySetsTask( Collections.singletonList( dependencySetSetEntry.getKey() ), dependencySetSetEntry.getValue(), + moduleProject, projectBuilder, + getLogger() ); + + task.setModuleProject( moduleProject ); + task.setModuleArtifact( chosenModuleArtifacts.get( moduleProject ) ); + task.setDefaultOutputDirectory( binaries.getOutputDirectory() ); + task.setDefaultOutputFileNameMapping( binaries.getOutputFileNameMapping() ); + + task.execute( archiver, configSource ); - task.execute( archiver, configSource ); + } } } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DefaultDependencyResolver.java Mon Nov 3 18:28:08 2014 @@ -22,8 +22,10 @@ package org.apache.maven.plugin.assembly 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; @@ -73,6 +75,7 @@ public class DefaultDependencyResolver @Requirement private ArtifactFactory factory; + @SuppressWarnings( "UnusedDeclaration" ) public DefaultDependencyResolver() { // for plexus init @@ -87,72 +90,99 @@ public class DefaultDependencyResolver enableLogging( logger ); } - public Set<Artifact> resolve( final Assembly assembly, final AssemblerConfigurationSource configSource ) + public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly, ModuleSet moduleSet, + final AssemblerConfigurationSource configSource, + List<DependencySet> dependencySets ) throws DependencyResolutionException { - final MavenProject currentProject = configSource.getProject(); + Map<DependencySet, Set<Artifact>> result = new LinkedHashMap<DependencySet, Set<Artifact>>(); - final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject ); - updateRepositoryResolutionRequirements( assembly, info ); - updateDependencySetResolutionRequirements( assembly.getDependencySets(), info, - AssemblyId.createAssemblyId( assembly ), currentProject ); - - if ( !info.isResolutionRequired() ) + for ( DependencySet dependencySet : dependencySets ) { - return new HashSet<Artifact>(); - } - final List<ArtifactRepository> repos = - aggregateRemoteArtifactRepositories( configSource.getRemoteRepositories(), info.getEnabledProjects() ); + final MavenProject currentProject = configSource.getProject(); - Set<Artifact> artifacts = info.getArtifacts(); - if ( info.isResolvedTransitively() ) - { - getLogger().debug( "Resolving project dependencies transitively." ); - artifacts = resolveTransitively( artifacts, repos, info, configSource ); - } - else - { - getLogger().debug( "Resolving project dependencies ONLY. Transitive dependencies WILL NOT be included in the results." ); - artifacts = resolveNonTransitively( assembly, artifacts, configSource, repos ); - } + final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject ); + updateRepositoryResolutionRequirements( assembly, info ); + final AssemblyId assemblyId = AssemblyId.createAssemblyId( assembly ); + updateDependencySetResolutionRequirements( assembly.getDependencySets(), info, assemblyId, currentProject ); + updateModuleSetResolutionRequirements( assemblyId, moduleSet, info, configSource ); + + Set<Artifact> artifacts; + if ( info.isResolutionRequired() ) + { + final List<ArtifactRepository> repos = + aggregateRemoteArtifactRepositories( configSource.getRemoteRepositories(), + info.getEnabledProjects() ); - return artifacts; + artifacts = info.getArtifacts(); + if ( info.isResolvedTransitively() ) + { + getLogger().debug( "Resolving project dependencies transitively." ); + artifacts = resolveTransitively( artifacts, repos, info, configSource ); + } + else + { + getLogger().debug( + "Resolving project dependencies ONLY. Transitive dependencies WILL NOT be included in the results." ); + artifacts = resolveNonTransitively( assembly, artifacts, configSource, repos ); + } + } + else + { + artifacts = new HashSet<Artifact>(); + } + result.put( dependencySet, artifacts ); + + } + return result; } - public Set<Artifact> resolve( final Assembly assembly, ModuleSet moduleSet, - final AssemblerConfigurationSource configSource ) + public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly, + final AssemblerConfigurationSource configSource, + List<DependencySet> dependencySets ) throws DependencyResolutionException { - final MavenProject currentProject = configSource.getProject(); + Map<DependencySet, Set<Artifact>> result = new LinkedHashMap<DependencySet, Set<Artifact>>(); - final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject ); - updateRepositoryResolutionRequirements( assembly, info ); - final AssemblyId assemblyId = AssemblyId.createAssemblyId( assembly ); - updateDependencySetResolutionRequirements( assembly.getDependencySets(), info, assemblyId, currentProject ); - updateModuleSetResolutionRequirements( assemblyId, moduleSet, info, configSource ); - - if ( !info.isResolutionRequired() ) + for ( DependencySet dependencySet : dependencySets ) { - return new HashSet<Artifact>(); - } - final List<ArtifactRepository> repos = - aggregateRemoteArtifactRepositories( configSource.getRemoteRepositories(), info.getEnabledProjects() ); + final MavenProject currentProject = configSource.getProject(); - Set<Artifact> artifacts = info.getArtifacts(); - if ( info.isResolvedTransitively() ) - { - getLogger().debug( "Resolving project dependencies transitively." ); - artifacts = resolveTransitively( artifacts, repos, info, configSource ); - } - else - { - getLogger().debug( "Resolving project dependencies ONLY. Transitive dependencies WILL NOT be included in the results." ); - artifacts = resolveNonTransitively( assembly, artifacts, configSource, repos ); - } + final ResolutionManagementInfo info = new ResolutionManagementInfo( currentProject ); + updateRepositoryResolutionRequirements( assembly, info ); + final AssemblyId assemblyId = AssemblyId.createAssemblyId( assembly ); + updateDependencySetResolutionRequirements( dependencySet , info, assemblyId, currentProject ); + + Set<Artifact> artifacts; + if ( info.isResolutionRequired() ) + { + final List<ArtifactRepository> repos = + aggregateRemoteArtifactRepositories( configSource.getRemoteRepositories(), + info.getEnabledProjects() ); + + artifacts = info.getArtifacts(); + if ( info.isResolvedTransitively() ) + { + getLogger().debug( "Resolving project dependencies transitively." ); + artifacts = resolveTransitively( artifacts, repos, info, configSource ); + } + else + { + getLogger().debug( + "Resolving project dependencies ONLY. Transitive dependencies WILL NOT be included in the results." ); + artifacts = resolveNonTransitively( assembly, artifacts, configSource, repos ); + } + } + else + { + artifacts = new HashSet<Artifact>(); + } + result.put( dependencySet, artifacts ); - return artifacts; + } + return result; } Set<Artifact> resolveNonTransitively( final Assembly assembly, final Set<Artifact> dependencyArtifacts, @@ -174,8 +204,8 @@ public class DefaultDependencyResolver { if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "Failed to resolve: " + depArtifact.getId() + " for assembly: " - + assembly.getId() ); + getLogger().debug( + "Failed to resolve: " + depArtifact.getId() + " for assembly: " + assembly.getId() ); } missing.add( depArtifact ); } @@ -183,8 +213,8 @@ public class DefaultDependencyResolver { if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "Failed to resolve: " + depArtifact.getId() + " for assembly: " - + assembly.getId() ); + getLogger().debug( + "Failed to resolve: " + depArtifact.getId() + " for assembly: " + assembly.getId() ); } missing.add( depArtifact ); } @@ -220,10 +250,9 @@ public class DefaultDependencyResolver ArtifactResolutionResult result; try { - result = - resolver.resolveTransitively( dependencyArtifacts, project.getArtifact(), - project.getManagedVersionMap(), localRepository, repos, metadataSource, - filter ); + result = resolver.resolveTransitively( dependencyArtifacts, project.getArtifact(), + project.getManagedVersionMap(), localRepository, repos, + metadataSource, filter ); } catch ( final ArtifactResolutionException e ) { @@ -330,6 +359,9 @@ public class DefaultDependencyResolver for ( final DependencySet set : depSets ) { // Surely this must be a bug, if there's multiple depSets with different isUseTransitiveDependencies + // Yes; this is MASSEMBLY-619, possibly others. Methods using this version should probably be axed + // MASSEMBLY-619 is now delegated to different overload. + // This probably means there is a parallel bleed between dependencies for module sets. requirements.setResolvedTransitively( set.isUseTransitiveDependencies() ); enableScope( set.getScope(), requirements ); @@ -353,18 +385,58 @@ public class DefaultDependencyResolver catch ( final InvalidDependencyVersionException e ) { throw new DependencyResolutionException( - "Failed to create dependency artifacts for resolution. Assembly: " - + assemblyId, e ); + "Failed to create dependency artifacts for resolution. Assembly: " + assemblyId, e ); } } requirements.addArtifacts( dependencyArtifacts ); - getLogger().debug( "Dependencies for project: " + project.getId() + " are:\n" - + StringUtils.join( dependencyArtifacts.iterator(), "\n" ) ); + getLogger().debug( "Dependencies for project: " + project.getId() + " are:\n" + StringUtils.join( + dependencyArtifacts.iterator(), "\n" ) ); } } } + + @SuppressWarnings( "unchecked" ) + void updateDependencySetResolutionRequirements( final DependencySet set, + final ResolutionManagementInfo requirements, AssemblyId assemblyId, + final MavenProject... projects ) + throws DependencyResolutionException + { + requirements.setResolutionRequired( true ); + + requirements.setResolvedTransitively( set.isUseTransitiveDependencies() ); + + enableScope( set.getScope(), requirements ); + + for ( final MavenProject project : projects ) + { + if ( project == null ) + { + continue; + } + + Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts(); + if ( dependencyArtifacts == null ) + { + try + { + dependencyArtifacts = project.createArtifacts( factory, null, requirements.getScopeFilter() ); + project.setDependencyArtifacts( dependencyArtifacts ); + } + catch ( final InvalidDependencyVersionException e ) + { + throw new DependencyResolutionException( + "Failed to create dependency artifacts for resolution. Assembly: " + assemblyId, e ); + } + } + + requirements.addArtifacts( dependencyArtifacts ); + getLogger().debug( "Dependencies for project: " + project.getId() + " are:\n" + StringUtils.join( + dependencyArtifacts.iterator(), "\n" ) ); + } + } + private void enableScope( final String scope, final ResolutionManagementInfo requirements ) { if ( Artifact.SCOPE_COMPILE.equals( scope ) ) Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/artifact/DependencyResolver.java Mon Nov 3 18:28:08 2014 @@ -22,8 +22,11 @@ package org.apache.maven.plugin.assembly import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; import org.apache.maven.plugin.assembly.model.Assembly; +import org.apache.maven.plugin.assembly.model.DependencySet; import org.apache.maven.plugin.assembly.model.ModuleSet; +import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -35,13 +38,15 @@ import java.util.Set; public interface DependencyResolver { - /** - * Resolve the project dependencies, according to the supplied configuration. - */ - Set<Artifact> resolve( Assembly assembly, AssemblerConfigurationSource configSource ) - throws DependencyResolutionException; + public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly, ModuleSet moduleSet, + final AssemblerConfigurationSource configSource, + List<DependencySet> dependencySets ) + throws DependencyResolutionException + ; + public Map<DependencySet, Set<Artifact>> resolveDependencySets( final Assembly assembly, + final AssemblerConfigurationSource configSource, + List<DependencySet> dependencySets ) + throws DependencyResolutionException + ; - Set<Artifact> resolve( final Assembly assembly, ModuleSet moduleSet, - final AssemblerConfigurationSource configSource ) - throws DependencyResolutionException; } \ No newline at end of file Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java Mon Nov 3 18:28:08 2014 @@ -101,11 +101,11 @@ public class DependencySetAssemblyPhaseT macTask.expectBuildFromRepository( depProject ); - DependencyResolver dr = EasyMock.createMock(DependencyResolver.class); + macTask.expectResolveDependencySets(); mm.replayAll(); - createPhase( macTask, logger, dr ).execute( assembly, macTask.archiver, macTask.configSource ); + createPhase( macTask, logger, macTask.dependencyResolver ).execute( assembly, macTask.archiver, macTask.configSource ); mm.verifyAll(); } @@ -134,11 +134,11 @@ public class DependencySetAssemblyPhaseT final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mm, null ); - DependencyResolver dr = EasyMock.createMock(DependencyResolver.class); + macTask.expectResolveDependencySets(); mm.replayAll(); - createPhase( macTask, logger, dr ).execute( assembly, null, macTask.configSource ); + createPhase( macTask, logger, macTask.dependencyResolver ).execute( assembly, null, macTask.configSource ); mm.verifyAll(); } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java Mon Nov 3 18:28:08 2014 @@ -305,9 +305,10 @@ public class ModuleSetAssemblyPhaseTest final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); + macTask.expectResolveDependencySets(); mm.replayAll(); - final ModuleSetAssemblyPhase phase = createPhase( logger, null ); + final ModuleSetAssemblyPhase phase = createPhase( logger, macTask.dependencyResolver, null); phase.execute( assembly, macTask.archiver, macTask.configSource ); mm.verifyAll(); @@ -383,11 +384,13 @@ public class ModuleSetAssemblyPhaseTest final Set<MavenProject> projects = singleton( project ); + macTask.expectResolveDependencySets(); + mm.replayAll(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); - createPhase( logger, null ).addModuleBinaries( null, null, binaries, projects, macTask.archiver, macTask.configSource ); + createPhase( logger, macTask.dependencyResolver, null ).addModuleBinaries( null, null, binaries, projects, macTask.archiver, macTask.configSource ); mm.verifyAll(); } @@ -462,13 +465,15 @@ public class ModuleSetAssemblyPhaseTest final Set<MavenProject> projects = singleton( project ); + macTask.expectResolveDependencySets(); + mm.replayAll(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); Assembly assembly = new Assembly(); - createPhase( logger, null ).addModuleBinaries( null, null, binaries, projects, macTask.archiver, macTask.configSource ); + createPhase( logger, macTask.dependencyResolver, null ).addModuleBinaries( null, null, binaries, projects, macTask.archiver, macTask.configSource ); mm.verifyAll(); } @@ -870,4 +875,8 @@ public class ModuleSetAssemblyPhaseTest return new ModuleSetAssemblyPhase( projectBuilder, dr, logger ); } + private ModuleSetAssemblyPhase createPhase( final Logger logger, DependencyResolver dr, MavenProjectBuilder projectBuilder1 ) + { + return new ModuleSetAssemblyPhase( projectBuilder1, dr, logger ); + } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java Mon Nov 3 18:28:08 2014 @@ -20,11 +20,19 @@ package org.apache.maven.plugin.assembly */ import java.io.File; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Set; import junit.framework.Assert; +import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; +import org.apache.maven.plugin.assembly.artifact.DependencyResolutionException; +import org.apache.maven.plugin.assembly.artifact.DependencyResolver; +import org.apache.maven.plugin.assembly.model.Assembly; +import org.apache.maven.plugin.assembly.model.DependencySet; +import org.apache.maven.plugin.assembly.model.ModuleSet; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; @@ -45,6 +53,8 @@ public class MockAndControlForAddArtifac private MavenProject project = null; + public final DependencyResolver dependencyResolver; + public MockAndControlForAddArtifactTask( final EasyMockSupport mockManager ) { this( mockManager, null ); @@ -56,6 +66,7 @@ public class MockAndControlForAddArtifac archiver = mockManager.createMock(Archiver.class); configSource = mockManager.createMock(AssemblerConfigurationSource.class); + dependencyResolver = mockManager.createMock( DependencyResolver.class); enableDefaultExpectations(); } @@ -157,4 +168,14 @@ public class MockAndControlForAddArtifac expect(configSource.getReactorProjects()).andReturn( projects ).atLeastOnce(); } + + public void expectResolveDependencySets() + throws DependencyResolutionException + { + expect( dependencyResolver.resolveDependencySets( (Assembly) anyObject(), (ModuleSet) anyObject(), + (AssemblerConfigurationSource) anyObject(), (List<DependencySet>) anyObject() )) + .andReturn( new LinkedHashMap<DependencySet, Set<Artifact>>( ) ).anyTimes(); + + } + } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java?rev=1636414&r1=1636413&r2=1636414&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java Mon Nov 3 18:28:08 2014 @@ -20,7 +20,9 @@ package org.apache.maven.plugin.assembly */ import java.io.File; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Set; import junit.framework.Assert; @@ -28,6 +30,11 @@ import org.apache.maven.artifact.Artifac import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; +import org.apache.maven.plugin.assembly.artifact.DependencyResolutionException; +import org.apache.maven.plugin.assembly.artifact.DependencyResolver; +import org.apache.maven.plugin.assembly.model.Assembly; +import org.apache.maven.plugin.assembly.model.DependencySet; +import org.apache.maven.plugin.assembly.model.ModuleSet; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; @@ -56,6 +63,9 @@ public class MockAndControlForAddDepende private final MavenProject project; + public final DependencyResolver dependencyResolver; + + public MockAndControlForAddDependencySetsTask( final EasyMockSupport mockManager ) { this( mockManager, null ); @@ -73,6 +83,9 @@ public class MockAndControlForAddDepende archiverManager = mockManager.createMock(ArchiverManager.class); + dependencyResolver = mockManager.createMock( DependencyResolver.class); + + enableDefaultExpectations(); } @@ -206,4 +219,14 @@ public class MockAndControlForAddDepende expect(configSource.getMavenSession()).andReturn( session ).anyTimes(); } + public void expectResolveDependencySets() + throws DependencyResolutionException + { + expect( dependencyResolver.resolveDependencySets( (Assembly) anyObject(), + (AssemblerConfigurationSource) anyObject(), (List<DependencySet>) anyObject() )) + .andReturn( new LinkedHashMap<DependencySet, Set<Artifact>>( ) ).anyTimes(); + + } + + }