View Javadoc
1   package org.apache.maven.model.composition;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.ArrayList;
23  import java.util.LinkedHashMap;
24  import java.util.List;
25  import java.util.Map;
26  
27  import javax.inject.Named;
28  import javax.inject.Singleton;
29  
30  import org.apache.maven.model.Dependency;
31  import org.apache.maven.model.DependencyManagement;
32  import org.apache.maven.model.Model;
33  import org.apache.maven.model.building.ModelBuildingRequest;
34  import org.apache.maven.model.building.ModelProblemCollector;
35  
36  /**
37   * Handles the import of dependency management from other models into the target model.
38   *
39   * @author Benjamin Bentmann
40   */
41  @Named
42  @Singleton
43  public class DefaultDependencyManagementImporter
44      implements DependencyManagementImporter
45  {
46  
47      @Override
48      public void importManagement( Model target, List<? extends DependencyManagement> sources,
49                                    ModelBuildingRequest request, ModelProblemCollector problems )
50      {
51          if ( sources != null && !sources.isEmpty() )
52          {
53              Map<String, Dependency> dependencies = new LinkedHashMap<>();
54  
55              DependencyManagement depMgmt = target.getDependencyManagement();
56  
57              if ( depMgmt != null )
58              {
59                  for ( Dependency dependency : depMgmt.getDependencies() )
60                  {
61                      dependencies.put( dependency.getManagementKey(), dependency );
62                  }
63              }
64              else
65              {
66                  depMgmt = new DependencyManagement();
67                  target.setDependencyManagement( depMgmt );
68              }
69  
70              for ( DependencyManagement source : sources )
71              {
72                  for ( Dependency dependency : source.getDependencies() )
73                  {
74                      String key = dependency.getManagementKey();
75                      if ( !dependencies.containsKey( key ) )
76                      {
77                          dependencies.put( key, dependency );
78                      }
79                  }
80              }
81  
82              depMgmt.setDependencies( new ArrayList<>( dependencies.values() ) );
83          }
84      }
85  
86  }