1   package org.apache.maven.model.normalization;
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  import java.util.ArrayList;
23  import java.util.Collections;
24  import java.util.LinkedHashMap;
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.maven.model.Build;
29  import org.apache.maven.model.Dependency;
30  import org.apache.maven.model.Model;
31  import org.apache.maven.model.Plugin;
32  import org.apache.maven.model.building.ModelBuildingRequest;
33  import org.apache.maven.model.building.ModelProblemCollector;
34  import org.apache.maven.model.merge.MavenModelMerger;
35  import org.codehaus.plexus.component.annotations.Component;
36  import org.codehaus.plexus.util.StringUtils;
37  
38  
39  
40  
41  
42  
43  @Component( role = ModelNormalizer.class )
44  public class DefaultModelNormalizer
45      implements ModelNormalizer
46  {
47  
48      private DuplicateMerger merger = new DuplicateMerger();
49  
50      @Override
51      public void mergeDuplicates( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
52      {
53          Build build = model.getBuild();
54          if ( build != null )
55          {
56              List<Plugin> plugins = build.getPlugins();
57              Map<Object, Plugin> normalized = new LinkedHashMap<>( plugins.size() * 2 );
58  
59              for ( Plugin plugin : plugins )
60              {
61                  Object key = plugin.getKey();
62                  Plugin first = normalized.get( key );
63                  if ( first != null )
64                  {
65                      merger.mergePlugin( plugin, first );
66                  }
67                  normalized.put( key, plugin );
68              }
69  
70              if ( plugins.size() != normalized.size() )
71              {
72                  build.setPlugins( new ArrayList<>( normalized.values() ) );
73              }
74          }
75  
76          
77  
78  
79  
80  
81  
82  
83          List<Dependency> dependencies = model.getDependencies();
84          Map<String, Dependency> normalized = new LinkedHashMap<>( dependencies.size() * 2 );
85  
86          for ( Dependency dependency : dependencies )
87          {
88              normalized.put( dependency.getManagementKey(), dependency );
89          }
90  
91          if ( dependencies.size() != normalized.size() )
92          {
93              model.setDependencies( new ArrayList<>( normalized.values() ) );
94          }
95      }
96  
97      protected static class DuplicateMerger
98          extends MavenModelMerger
99      {
100 
101         public void mergePlugin( Plugin target, Plugin source )
102         {
103             super.mergePlugin( target, source, false, Collections.emptyMap() );
104         }
105 
106     }
107 
108     @Override
109     public void injectDefaultValues( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
110     {
111         injectDependencyDefaults( model.getDependencies() );
112 
113         Build build = model.getBuild();
114         if ( build != null )
115         {
116             for ( Plugin plugin : build.getPlugins() )
117             {
118                 injectDependencyDefaults( plugin.getDependencies() );
119             }
120         }
121     }
122 
123     private void injectDependencyDefaults( List<Dependency> dependencies )
124     {
125         for ( Dependency dependency : dependencies )
126         {
127             if ( StringUtils.isEmpty( dependency.getScope() ) )
128             {
129                 
130                 dependency.setScope( "compile" );
131             }
132         }
133     }
134 
135 }