View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.model.building;
20  
21  import org.apache.maven.model.Model;
22  import org.apache.maven.model.composition.DefaultDependencyManagementImporter;
23  import org.apache.maven.model.composition.DependencyManagementImporter;
24  import org.apache.maven.model.inheritance.DefaultInheritanceAssembler;
25  import org.apache.maven.model.inheritance.InheritanceAssembler;
26  import org.apache.maven.model.interpolation.DefaultModelVersionProcessor;
27  import org.apache.maven.model.interpolation.ModelInterpolator;
28  import org.apache.maven.model.interpolation.ModelVersionProcessor;
29  import org.apache.maven.model.interpolation.StringVisitorModelInterpolator;
30  import org.apache.maven.model.io.DefaultModelReader;
31  import org.apache.maven.model.io.ModelReader;
32  import org.apache.maven.model.locator.DefaultModelLocator;
33  import org.apache.maven.model.locator.ModelLocator;
34  import org.apache.maven.model.management.DefaultDependencyManagementInjector;
35  import org.apache.maven.model.management.DefaultPluginManagementInjector;
36  import org.apache.maven.model.management.DependencyManagementInjector;
37  import org.apache.maven.model.management.PluginManagementInjector;
38  import org.apache.maven.model.normalization.DefaultModelNormalizer;
39  import org.apache.maven.model.normalization.ModelNormalizer;
40  import org.apache.maven.model.path.DefaultModelPathTranslator;
41  import org.apache.maven.model.path.DefaultModelUrlNormalizer;
42  import org.apache.maven.model.path.DefaultPathTranslator;
43  import org.apache.maven.model.path.DefaultUrlNormalizer;
44  import org.apache.maven.model.path.ModelPathTranslator;
45  import org.apache.maven.model.path.ModelUrlNormalizer;
46  import org.apache.maven.model.path.PathTranslator;
47  import org.apache.maven.model.path.ProfileActivationFilePathInterpolator;
48  import org.apache.maven.model.path.UrlNormalizer;
49  import org.apache.maven.model.plugin.DefaultPluginConfigurationExpander;
50  import org.apache.maven.model.plugin.DefaultReportConfigurationExpander;
51  import org.apache.maven.model.plugin.DefaultReportingConverter;
52  import org.apache.maven.model.plugin.LifecycleBindingsInjector;
53  import org.apache.maven.model.plugin.PluginConfigurationExpander;
54  import org.apache.maven.model.plugin.ReportConfigurationExpander;
55  import org.apache.maven.model.plugin.ReportingConverter;
56  import org.apache.maven.model.profile.DefaultProfileInjector;
57  import org.apache.maven.model.profile.DefaultProfileSelector;
58  import org.apache.maven.model.profile.ProfileInjector;
59  import org.apache.maven.model.profile.ProfileSelector;
60  import org.apache.maven.model.profile.activation.FileProfileActivator;
61  import org.apache.maven.model.profile.activation.JdkVersionProfileActivator;
62  import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
63  import org.apache.maven.model.profile.activation.ProfileActivator;
64  import org.apache.maven.model.profile.activation.PropertyProfileActivator;
65  import org.apache.maven.model.superpom.DefaultSuperPomProvider;
66  import org.apache.maven.model.superpom.SuperPomProvider;
67  import org.apache.maven.model.validation.DefaultModelValidator;
68  import org.apache.maven.model.validation.ModelValidator;
69  
70  /**
71   * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
72   * only meant as a utility for developers that want to employ the model builder outside of the Maven build system, Maven
73   * plugins should always acquire model builder instances via dependency injection. Developers might want to subclass
74   * this factory to provide custom implementations for some of the components used by the model builder.
75   *
76   * @deprecated use {@code org.apache.maven.api.services.ModelBuilder} instead
77   */
78  @Deprecated(since = "4.0.0")
79  public class DefaultModelBuilderFactory {
80  
81      protected ModelProcessor newModelProcessor() {
82          DefaultModelProcessor processor = new DefaultModelProcessor();
83          processor.setModelLocator(newModelLocator());
84          processor.setModelReader(newModelReader());
85          return processor;
86      }
87  
88      protected ModelLocator newModelLocator() {
89          return new DefaultModelLocator();
90      }
91  
92      protected ModelReader newModelReader() {
93          return new DefaultModelReader();
94      }
95  
96      protected ProfileSelector newProfileSelector() {
97          DefaultProfileSelector profileSelector = new DefaultProfileSelector();
98  
99          for (ProfileActivator activator : newProfileActivators()) {
100             profileSelector.addProfileActivator(activator);
101         }
102 
103         return profileSelector;
104     }
105 
106     protected ProfileActivator[] newProfileActivators() {
107         return new ProfileActivator[] {
108             new JdkVersionProfileActivator(),
109             new OperatingSystemProfileActivator(),
110             new PropertyProfileActivator(),
111             new FileProfileActivator()
112                     .setProfileActivationFilePathInterpolator(newProfileActivationFilePathInterpolator())
113         };
114     }
115 
116     protected ProfileActivationFilePathInterpolator newProfileActivationFilePathInterpolator() {
117         return new ProfileActivationFilePathInterpolator().setPathTranslator(newPathTranslator());
118     }
119 
120     protected UrlNormalizer newUrlNormalizer() {
121         return new DefaultUrlNormalizer();
122     }
123 
124     protected PathTranslator newPathTranslator() {
125         return new DefaultPathTranslator();
126     }
127 
128     protected ModelInterpolator newModelInterpolator() {
129         UrlNormalizer normalizer = newUrlNormalizer();
130         PathTranslator pathTranslator = newPathTranslator();
131         return new StringVisitorModelInterpolator()
132                 .setPathTranslator(pathTranslator)
133                 .setUrlNormalizer(normalizer)
134                 .setVersionPropertiesProcessor(newModelVersionPropertiesProcessor());
135     }
136 
137     protected ModelVersionProcessor newModelVersionPropertiesProcessor() {
138         return new DefaultModelVersionProcessor();
139     }
140 
141     protected ModelValidator newModelValidator() {
142         return new DefaultModelValidator(newModelVersionPropertiesProcessor());
143     }
144 
145     protected ModelNormalizer newModelNormalizer() {
146         return new DefaultModelNormalizer();
147     }
148 
149     protected ModelPathTranslator newModelPathTranslator() {
150         return new DefaultModelPathTranslator().setPathTranslator(newPathTranslator());
151     }
152 
153     protected ModelUrlNormalizer newModelUrlNormalizer() {
154         return new DefaultModelUrlNormalizer().setUrlNormalizer(newUrlNormalizer());
155     }
156 
157     protected InheritanceAssembler newInheritanceAssembler() {
158         return new DefaultInheritanceAssembler();
159     }
160 
161     protected ProfileInjector newProfileInjector() {
162         return new DefaultProfileInjector();
163     }
164 
165     protected SuperPomProvider newSuperPomProvider() {
166         return new DefaultSuperPomProvider().setModelProcessor(newModelProcessor());
167     }
168 
169     protected DependencyManagementImporter newDependencyManagementImporter() {
170         return new DefaultDependencyManagementImporter();
171     }
172 
173     protected DependencyManagementInjector newDependencyManagementInjector() {
174         return new DefaultDependencyManagementInjector();
175     }
176 
177     protected LifecycleBindingsInjector newLifecycleBindingsInjector() {
178         return new StubLifecycleBindingsInjector();
179     }
180 
181     protected PluginManagementInjector newPluginManagementInjector() {
182         return new DefaultPluginManagementInjector();
183     }
184 
185     protected PluginConfigurationExpander newPluginConfigurationExpander() {
186         return new DefaultPluginConfigurationExpander();
187     }
188 
189     protected ReportConfigurationExpander newReportConfigurationExpander() {
190         return new DefaultReportConfigurationExpander();
191     }
192 
193     protected ReportingConverter newReportingConverter() {
194         return new DefaultReportingConverter();
195     }
196 
197     /**
198      * Creates a new model builder instance.
199      *
200      * @return The new model builder instance, never {@code null}.
201      */
202     public DefaultModelBuilder newInstance() {
203         DefaultModelBuilder modelBuilder = new DefaultModelBuilder();
204 
205         modelBuilder.setModelProcessor(newModelProcessor());
206         modelBuilder.setModelValidator(newModelValidator());
207         modelBuilder.setModelNormalizer(newModelNormalizer());
208         modelBuilder.setModelPathTranslator(newModelPathTranslator());
209         modelBuilder.setModelUrlNormalizer(newModelUrlNormalizer());
210         modelBuilder.setModelInterpolator(newModelInterpolator());
211         modelBuilder.setInheritanceAssembler(newInheritanceAssembler());
212         modelBuilder.setProfileInjector(newProfileInjector());
213         modelBuilder.setProfileSelector(newProfileSelector());
214         modelBuilder.setSuperPomProvider(newSuperPomProvider());
215         modelBuilder.setDependencyManagementImporter(newDependencyManagementImporter());
216         modelBuilder.setDependencyManagementInjector(newDependencyManagementInjector());
217         modelBuilder.setLifecycleBindingsInjector(newLifecycleBindingsInjector());
218         modelBuilder.setPluginManagementInjector(newPluginManagementInjector());
219         modelBuilder.setPluginConfigurationExpander(newPluginConfigurationExpander());
220         modelBuilder.setReportConfigurationExpander(newReportConfigurationExpander());
221         modelBuilder.setReportingConverter(newReportingConverter());
222         modelBuilder.setProfileActivationFilePathInterpolator(newProfileActivationFilePathInterpolator());
223 
224         return modelBuilder;
225     }
226 
227     private static class StubLifecycleBindingsInjector implements LifecycleBindingsInjector {
228 
229         @Override
230         public void injectLifecycleBindings(
231                 Model model, ModelBuildingRequest request, ModelProblemCollector problems) {}
232     }
233 }