|
21 | 21 | import javax.inject.Inject; |
22 | 22 | import javax.inject.Named; |
23 | 23 |
|
| 24 | +import java.io.File; |
| 25 | +import java.io.IOException; |
| 26 | +import java.io.InputStream; |
| 27 | +import java.nio.file.Files; |
24 | 28 | import java.nio.file.Path; |
25 | 29 | import java.util.ArrayList; |
26 | | -import java.util.Collection; |
27 | 30 | import java.util.List; |
| 31 | +import java.util.Objects; |
28 | 32 | import java.util.stream.Collectors; |
29 | 33 |
|
30 | 34 | import org.apache.maven.api.SessionData; |
|
35 | 39 | import org.apache.maven.api.model.ModelBase; |
36 | 40 | import org.apache.maven.api.model.Profile; |
37 | 41 | import org.apache.maven.api.model.Repository; |
38 | | -import org.apache.maven.api.services.Interpolator; |
39 | 42 | import org.apache.maven.api.services.ModelBuilder; |
40 | 43 | import org.apache.maven.api.services.ModelBuilderException; |
41 | 44 | import org.apache.maven.api.services.ModelBuilderRequest; |
42 | 45 | import org.apache.maven.api.services.ModelBuilderResult; |
43 | | -import org.apache.maven.api.services.ModelProblemCollector; |
44 | 46 | import org.apache.maven.api.services.ModelSource; |
45 | | -import org.apache.maven.api.services.SuperPomProvider; |
46 | | -import org.apache.maven.api.services.model.DependencyManagementImporter; |
47 | | -import org.apache.maven.api.services.model.DependencyManagementInjector; |
48 | | -import org.apache.maven.api.services.model.InheritanceAssembler; |
| 47 | +import org.apache.maven.api.services.Source; |
49 | 48 | import org.apache.maven.api.services.model.LifecycleBindingsInjector; |
50 | | -import org.apache.maven.api.services.model.ModelCacheFactory; |
51 | | -import org.apache.maven.api.services.model.ModelInterpolator; |
52 | | -import org.apache.maven.api.services.model.ModelNormalizer; |
53 | | -import org.apache.maven.api.services.model.ModelPathTranslator; |
54 | | -import org.apache.maven.api.services.model.ModelProcessor; |
55 | | -import org.apache.maven.api.services.model.ModelResolver; |
56 | | -import org.apache.maven.api.services.model.ModelUrlNormalizer; |
57 | | -import org.apache.maven.api.services.model.ModelValidator; |
58 | | -import org.apache.maven.api.services.model.ModelVersionParser; |
59 | | -import org.apache.maven.api.services.model.PluginConfigurationExpander; |
60 | | -import org.apache.maven.api.services.model.PluginManagementInjector; |
61 | | -import org.apache.maven.api.services.model.ProfileActivationContext; |
62 | | -import org.apache.maven.api.services.model.ProfileInjector; |
63 | | -import org.apache.maven.api.services.model.ProfileSelector; |
64 | | -import org.apache.maven.api.spi.ModelTransformer; |
65 | 49 | import org.apache.maven.internal.impl.InternalSession; |
66 | | -import org.apache.maven.internal.impl.model.DefaultModelBuilder; |
67 | | -import org.apache.maven.internal.impl.model.DefaultProfileSelector; |
68 | | -import org.apache.maven.internal.impl.model.ProfileActivationFilePathInterpolator; |
69 | 50 | import org.apache.maven.model.v4.MavenModelVersion; |
70 | 51 | import org.apache.maven.project.MavenProject; |
71 | 52 | import org.eclipse.aether.RepositorySystemSession; |
72 | | -import org.slf4j.Logger; |
73 | | -import org.slf4j.LoggerFactory; |
74 | 53 |
|
75 | 54 | @Named |
76 | 55 | class DefaultConsumerPomBuilder implements ConsumerPomBuilder { |
77 | 56 | private static final String BOM_PACKAGING = "bom"; |
78 | 57 |
|
79 | 58 | public static final String POM_PACKAGING = "pom"; |
80 | 59 |
|
81 | | - private final ProfileInjector profileInjector; |
82 | | - private final InheritanceAssembler inheritanceAssembler; |
83 | | - private final DependencyManagementImporter dependencyManagementImporter; |
84 | | - private final DependencyManagementInjector dependencyManagementInjector; |
85 | 60 | private final LifecycleBindingsInjector lifecycleBindingsInjector; |
86 | | - private final ModelInterpolator modelInterpolator; |
87 | | - private final ModelNormalizer modelNormalizer; |
88 | | - private final ModelPathTranslator modelPathTranslator; |
89 | | - private final ModelProcessor modelProcessor; |
90 | | - private final ModelUrlNormalizer modelUrlNormalizer; |
91 | | - private final ModelValidator modelValidator; |
92 | | - private final PluginConfigurationExpander pluginConfigurationExpander; |
93 | | - private final PluginManagementInjector pluginManagementInjector; |
94 | | - private final SuperPomProvider superPomProvider; |
95 | | - private final ModelVersionParser versionParser; |
96 | | - private final ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator; |
97 | | - private final List<ModelTransformer> transformers; |
98 | | - private final ModelCacheFactory modelCacheFactory; |
99 | | - private final ModelResolver modelResolver; |
100 | | - private final Interpolator interpolator; |
101 | 61 |
|
102 | 62 | @Inject |
103 | 63 | @SuppressWarnings("checkstyle:ParameterNumber") |
104 | | - DefaultConsumerPomBuilder( |
105 | | - ProfileInjector profileInjector, |
106 | | - InheritanceAssembler inheritanceAssembler, |
107 | | - DependencyManagementImporter dependencyManagementImporter, |
108 | | - DependencyManagementInjector dependencyManagementInjector, |
109 | | - LifecycleBindingsInjector lifecycleBindingsInjector, |
110 | | - ModelInterpolator modelInterpolator, |
111 | | - ModelNormalizer modelNormalizer, |
112 | | - ModelPathTranslator modelPathTranslator, |
113 | | - ModelProcessor modelProcessor, |
114 | | - ModelUrlNormalizer modelUrlNormalizer, |
115 | | - ModelValidator modelValidator, |
116 | | - PluginConfigurationExpander pluginConfigurationExpander, |
117 | | - PluginManagementInjector pluginManagementInjector, |
118 | | - SuperPomProvider superPomProvider, |
119 | | - ModelVersionParser versionParser, |
120 | | - ProfileActivationFilePathInterpolator profileActivationFilePathInterpolator, |
121 | | - List<ModelTransformer> transformers, |
122 | | - ModelCacheFactory modelCacheFactory, |
123 | | - ModelResolver modelResolver, |
124 | | - Interpolator interpolator) { |
125 | | - this.profileInjector = profileInjector; |
126 | | - this.inheritanceAssembler = inheritanceAssembler; |
127 | | - this.dependencyManagementImporter = dependencyManagementImporter; |
128 | | - this.dependencyManagementInjector = dependencyManagementInjector; |
| 64 | + DefaultConsumerPomBuilder(LifecycleBindingsInjector lifecycleBindingsInjector) { |
129 | 65 | this.lifecycleBindingsInjector = lifecycleBindingsInjector; |
130 | | - this.modelInterpolator = modelInterpolator; |
131 | | - this.modelNormalizer = modelNormalizer; |
132 | | - this.modelPathTranslator = modelPathTranslator; |
133 | | - this.modelProcessor = modelProcessor; |
134 | | - this.modelUrlNormalizer = modelUrlNormalizer; |
135 | | - this.modelValidator = modelValidator; |
136 | | - this.pluginConfigurationExpander = pluginConfigurationExpander; |
137 | | - this.pluginManagementInjector = pluginManagementInjector; |
138 | | - this.superPomProvider = superPomProvider; |
139 | | - this.versionParser = versionParser; |
140 | | - this.profileActivationFilePathInterpolator = profileActivationFilePathInterpolator; |
141 | | - this.transformers = transformers; |
142 | | - this.modelCacheFactory = modelCacheFactory; |
143 | | - this.modelResolver = modelResolver; |
144 | | - this.interpolator = interpolator; |
145 | 66 | } |
146 | 67 |
|
147 | | - private final Logger logger = LoggerFactory.getLogger(getClass()); |
148 | | - |
149 | 68 | @Override |
150 | 69 | public Model build(RepositorySystemSession session, MavenProject project, Path src) throws ModelBuilderException { |
151 | 70 | Model model = project.getModel().getDelegate(); |
@@ -174,49 +93,18 @@ protected Model buildNonPom(RepositorySystemSession session, MavenProject projec |
174 | 93 |
|
175 | 94 | private ModelBuilderResult buildModel(RepositorySystemSession session, MavenProject project, Path src) |
176 | 95 | throws ModelBuilderException { |
177 | | - ProfileSelector customSelector = new DefaultProfileSelector() { |
178 | | - @Override |
179 | | - public List<Profile> getActiveProfiles( |
180 | | - Collection<Profile> profiles, ProfileActivationContext context, ModelProblemCollector problems) { |
181 | | - return new ArrayList<>(); |
182 | | - } |
183 | | - }; |
184 | | - // TODO: the custom selector should be used as a flag on the request |
185 | | - DefaultModelBuilder modelBuilder = new DefaultModelBuilder( |
186 | | - modelProcessor, |
187 | | - modelValidator, |
188 | | - modelNormalizer, |
189 | | - modelInterpolator, |
190 | | - modelPathTranslator, |
191 | | - modelUrlNormalizer, |
192 | | - superPomProvider, |
193 | | - inheritanceAssembler, |
194 | | - customSelector, |
195 | | - profileInjector, |
196 | | - pluginManagementInjector, |
197 | | - dependencyManagementInjector, |
198 | | - dependencyManagementImporter, |
199 | | - pluginConfigurationExpander, |
200 | | - profileActivationFilePathInterpolator, |
201 | | - versionParser, |
202 | | - transformers, |
203 | | - modelCacheFactory, |
204 | | - modelResolver, |
205 | | - interpolator); |
206 | 96 | InternalSession iSession = InternalSession.from(session); |
207 | 97 | ModelBuilderRequest.ModelBuilderRequestBuilder request = ModelBuilderRequest.builder(); |
208 | | - request.requestType(ModelBuilderRequest.RequestType.BUILD_POM); |
| 98 | + request.requestType(ModelBuilderRequest.RequestType.CONSUMER_POM); |
209 | 99 | request.session(iSession); |
210 | | - request.source(ModelSource.fromPath(src)); |
| 100 | + // in order to resolve parents, we need to fake being at the correct location |
| 101 | + request.source(new PomConsumerModelSource(project.getModel().getPomPath(), src)); |
211 | 102 | request.locationTracking(false); |
212 | 103 | request.systemProperties(session.getSystemProperties()); |
213 | 104 | request.userProperties(session.getUserProperties()); |
214 | 105 | request.lifecycleBindingsInjector(lifecycleBindingsInjector::injectLifecycleBindings); |
215 | 106 | ModelBuilder.ModelBuilderSession mbSession = |
216 | 107 | iSession.getData().get(SessionData.key(ModelBuilder.ModelBuilderSession.class)); |
217 | | - if (mbSession == null) { |
218 | | - mbSession = modelBuilder.newSession(); |
219 | | - } |
220 | 108 | return mbSession.build(request.build()); |
221 | 109 | } |
222 | 110 |
|
@@ -320,4 +208,63 @@ private static List<Repository> pruneRepositories(List<Repository> repositories) |
320 | 208 | .filter(r -> !org.apache.maven.api.Repository.CENTRAL_ID.equals(r.getId())) |
321 | 209 | .collect(Collectors.toList()); |
322 | 210 | } |
| 211 | + |
| 212 | + static class PomConsumerModelSource implements ModelSource { |
| 213 | + final Path path; |
| 214 | + final Path src; |
| 215 | + |
| 216 | + PomConsumerModelSource(Path path, Path src) { |
| 217 | + this.path = path; |
| 218 | + this.src = src; |
| 219 | + } |
| 220 | + |
| 221 | + @Override |
| 222 | + public Path getPath() { |
| 223 | + return path; |
| 224 | + } |
| 225 | + |
| 226 | + @Override |
| 227 | + public InputStream openStream() throws IOException { |
| 228 | + return Files.newInputStream(src); |
| 229 | + } |
| 230 | + |
| 231 | + @Override |
| 232 | + public String getLocation() { |
| 233 | + return src.toString(); |
| 234 | + } |
| 235 | + |
| 236 | + @Override |
| 237 | + public Source resolve(String relative) { |
| 238 | + return ModelSource.fromPath(path.resolve(relative)); |
| 239 | + } |
| 240 | + |
| 241 | + @Override |
| 242 | + public ModelSource resolve(ModelLocator locator, String relative) { |
| 243 | + String norm = relative.replace('\\', File.separatorChar).replace('/', File.separatorChar); |
| 244 | + Path path = getPath().getParent().resolve(norm); |
| 245 | + Path relatedPom = locator.locateExistingPom(path); |
| 246 | + if (relatedPom != null) { |
| 247 | + return ModelSource.fromPath(relatedPom); |
| 248 | + } |
| 249 | + return null; |
| 250 | + } |
| 251 | + |
| 252 | + @Override |
| 253 | + public boolean equals(Object o) { |
| 254 | + return this == o |
| 255 | + || o.getClass() == getClass() |
| 256 | + && Objects.equals(path, ((PomConsumerModelSource) o).path) |
| 257 | + && Objects.equals(src, ((PomConsumerModelSource) o).src); |
| 258 | + } |
| 259 | + |
| 260 | + @Override |
| 261 | + public int hashCode() { |
| 262 | + return Objects.hash(path, src); |
| 263 | + } |
| 264 | + |
| 265 | + @Override |
| 266 | + public String toString() { |
| 267 | + return "PomConsumerModelSource[" + "path=" + path + ']'; |
| 268 | + } |
| 269 | + } |
323 | 270 | } |
0 commit comments