[ 
https://issues.apache.org/jira/browse/MNG-7945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17789763#comment-17789763
 ] 

ASF GitHub Bot commented on MNG-7945:
-------------------------------------

gnodet commented on code in PR #1323:
URL: https://github.com/apache/maven/pull/1323#discussion_r1405329274


##########
maven-core/src/main/java/org/apache/maven/internal/transformation/DefaultConsumerPomBuilder.java:
##########
@@ -0,0 +1,236 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.internal.transformation;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+import org.apache.maven.api.model.DistributionManagement;
+import org.apache.maven.api.model.Model;
+import org.apache.maven.api.model.ModelBase;
+import org.apache.maven.api.model.Profile;
+import org.apache.maven.api.model.Repository;
+import org.apache.maven.model.building.DefaultModelBuilder;
+import org.apache.maven.model.building.DefaultModelBuilderFactory;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingException;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingResult;
+import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProcessor;
+import org.apache.maven.model.composition.DependencyManagementImporter;
+import org.apache.maven.model.inheritance.InheritanceAssembler;
+import org.apache.maven.model.interpolation.ModelInterpolator;
+import org.apache.maven.model.management.DependencyManagementInjector;
+import org.apache.maven.model.management.PluginManagementInjector;
+import org.apache.maven.model.normalization.ModelNormalizer;
+import org.apache.maven.model.path.ModelPathTranslator;
+import org.apache.maven.model.path.ModelUrlNormalizer;
+import org.apache.maven.model.plugin.LifecycleBindingsInjector;
+import org.apache.maven.model.plugin.PluginConfigurationExpander;
+import org.apache.maven.model.plugin.ReportConfigurationExpander;
+import org.apache.maven.model.profile.DefaultProfileSelector;
+import org.apache.maven.model.profile.ProfileActivationContext;
+import org.apache.maven.model.profile.ProfileInjector;
+import org.apache.maven.model.profile.ProfileSelector;
+import org.apache.maven.model.superpom.SuperPomProvider;
+import org.apache.maven.model.v4.MavenModelVersion;
+import org.apache.maven.model.validation.ModelValidator;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.project.ProjectModelResolver;
+import org.apache.maven.repository.internal.ModelCacheFactory;
+import org.codehaus.plexus.PlexusContainer;
+import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.RequestTrace;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+
+@Named
+public class DefaultConsumerPomBuilder implements ConsumerPomBuilder {
+
+    private static final String BOM_PACKAGING = "bom";
+
+    public static final String POM_PACKAGING = "pom";
+
+    @Inject
+    PlexusContainer container;
+
+    @Inject
+    ModelCacheFactory modelCacheFactory;
+
+    public Model build(RepositorySystemSession session, MavenProject project, 
Path src) {
+        Model model = project.getModel().getDelegate();
+        String packaging = model.getPackaging();
+        if (POM_PACKAGING.equals(packaging)) {
+            return buildPom(session, project, src);
+        } else {
+            return buildNonPom(session, project, src);
+        }
+    }
+
+    protected Model buildPom(RepositorySystemSession session, MavenProject 
project, Path src) {
+        try {
+            ModelBuildingResult result = buildModel(session, project, src);
+            Model model = result.getRawModel().getDelegate();
+            return transform(model);
+        } catch (ModelBuildingException | ComponentLookupException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected Model buildNonPom(RepositorySystemSession session, MavenProject 
project, Path src) {
+        try {
+            ModelBuildingResult result = buildModel(session, project, src);
+            Model model = result.getEffectiveModel().getDelegate();
+            return transform(model);
+        } catch (ModelBuildingException | ComponentLookupException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private ModelBuildingResult buildModel(RepositorySystemSession session, 
MavenProject project, Path src)
+            throws ComponentLookupException, ModelBuildingException {
+        ProfileSelector customSelector = new DefaultProfileSelector() {
+            @Override
+            public List<Profile> getActiveProfilesV4(
+                    Collection<Profile> profiles, ProfileActivationContext 
context, ModelProblemCollector problems) {
+                return new ArrayList<>();
+            }
+        };
+        DefaultModelBuilder modelBuilder = new DefaultModelBuilderFactory()
+                .setProfileSelector(customSelector)
+                // apply currently active ModelProcessor etc. to support 
extensions like jgitver
+                .setProfileInjector(lookup(ProfileInjector.class))
+                .setInheritanceAssembler(lookup(InheritanceAssembler.class))
+                
.setDependencyManagementImporter(lookup(DependencyManagementImporter.class))
+                
.setDependencyManagementInjector(lookup(DependencyManagementInjector.class))
+                
.setLifecycleBindingsInjector(lookup(LifecycleBindingsInjector.class))
+                .setModelInterpolator(lookup(ModelInterpolator.class))
+                .setModelNormalizer(lookup(ModelNormalizer.class))
+                .setModelPathTranslator(lookup(ModelPathTranslator.class))
+                .setModelProcessor(lookup(ModelProcessor.class))
+                .setModelUrlNormalizer(lookup(ModelUrlNormalizer.class))
+                .setModelValidator(lookup(ModelValidator.class))
+                
.setPluginConfigurationExpander(lookup(PluginConfigurationExpander.class))
+                
.setPluginManagementInjector(lookup(PluginManagementInjector.class))
+                
.setReportConfigurationExpander(lookup(ReportConfigurationExpander.class))
+                .setSuperPomProvider(lookup(SuperPomProvider.class))
+                .newInstance();
+        DefaultModelBuildingRequest request = new 
DefaultModelBuildingRequest();
+        try {
+            request.setRootDirectory(project.getRootDirectory());
+        } catch (IllegalStateException e) {
+            // ignore if we don't have a root directory
+        }
+        request.setPomFile(src.toFile());
+        
request.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL);
+        request.setLocationTracking(false);
+        request.setModelResolver(new ProjectModelResolver(
+                session,
+                new RequestTrace(null),
+                lookup(RepositorySystem.class),
+                lookup(RemoteRepositoryManager.class),
+                project.getRemoteProjectRepositories(),
+                ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT,
+                null));
+        
request.setTransformerContextBuilder(modelBuilder.newTransformerContextBuilder());
+        Properties props = new Properties();
+        props.putAll(session.getSystemProperties());
+        request.setSystemProperties(props);
+        props = new Properties();

Review Comment:
   Fixed with a method





> Fix profile settings being injected into consumer POMs
> ------------------------------------------------------
>
>                 Key: MNG-7945
>                 URL: https://issues.apache.org/jira/browse/MNG-7945
>             Project: Maven
>          Issue Type: Bug
>    Affects Versions: 4.0.0-alpha-8
>            Reporter: Tamas Cservenak
>            Assignee: Guillaume Nodet
>            Priority: Major
>             Fix For: 4.0.0-alpha-9
>
>
> The consumer POMs may end up containing information from user settings.
> The reason is that they are currently built from the effective POMs.  They 
> need to be rebuilt based on raw models.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to