[ 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)