1   package org.apache.maven.plugins.assembly.archive.phase;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import javax.inject.Inject;
23  import javax.inject.Named;
24  import javax.inject.Singleton;
25  
26  import org.apache.maven.artifact.Artifact;
27  import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
28  import org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
29  import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
30  import org.apache.maven.plugins.assembly.archive.task.AddDependencySetsTask;
31  import org.apache.maven.plugins.assembly.artifact.DependencyResolutionException;
32  import org.apache.maven.plugins.assembly.artifact.DependencyResolver;
33  import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
34  import org.apache.maven.plugins.assembly.model.Assembly;
35  import org.apache.maven.plugins.assembly.model.DependencySet;
36  import org.apache.maven.project.ProjectBuilder;
37  import org.codehaus.plexus.archiver.Archiver;
38  
39  import java.util.Collections;
40  import java.util.Map;
41  import java.util.Set;
42  
43  import static java.util.Objects.requireNonNull;
44  
45  
46  
47  
48  
49  
50  @Singleton
51  @Named( "dependency-sets" )
52  public class DependencySetAssemblyPhase implements AssemblyArchiverPhase, PhaseOrder
53  {
54      private final ProjectBuilder projectBuilder;
55  
56      private final DependencyResolver dependencyResolver;
57  
58      
59  
60  
61      @Inject
62      public DependencySetAssemblyPhase( final ProjectBuilder projectBuilder,
63                                         final DependencyResolver dependencyResolver )
64      {
65          this.projectBuilder = requireNonNull( projectBuilder );
66          this.dependencyResolver = requireNonNull( dependencyResolver );
67      }
68  
69      
70  
71  
72      @Override
73      public void execute( final Assembly assembly, final Archiver archiver,
74                           final AssemblerConfigurationSource configSource )
75          throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException,
76          DependencyResolutionException
77      {
78  
79          Map<DependencySet, Set<Artifact>> resolved =
80              dependencyResolver.resolveDependencySets( assembly, configSource, assembly.getDependencySets() );
81          for ( Map.Entry<DependencySet, Set<Artifact>> dependencySetSetEntry : resolved.entrySet() )
82          {
83              final AddDependencySetsTask task =
84                  new AddDependencySetsTask( Collections.singletonList( dependencySetSetEntry.getKey() ),
85                          dependencySetSetEntry.getValue(), configSource.getProject(),
86                          projectBuilder );
87  
88              task.execute( archiver, configSource );
89          }
90      }
91  
92      @Override
93      public int order()
94      {
95          
96          return 40;
97          
98      }
99  }