[
https://issues.apache.org/jira/browse/MNG-7945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17789682#comment-17789682
]
ASF GitHub Bot commented on MNG-7945:
-------------------------------------
elharo commented on code in PR #1323:
URL: https://github.com/apache/maven/pull/1323#discussion_r1405140221
##########
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:
rename to userProperties and systemProperties; reusing local variables is
bug prone
##########
maven-core/src/test/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformerTest.java:
##########
@@ -60,9 +56,15 @@ void transform() throws Exception {
try (InputStream expected = Files.newInputStream(beforePomFile)) {
Model model = new Model(new MavenStaxReader().read(expected));
MavenProject project = new MavenProject(model);
- ConsumerPomArtifactTransformer t = new
ConsumerPomArtifactTransformer(modelBuilder);
- t.createConsumerPomArtifact(project, tempFile, systemSessionMock)
- .transform(beforePomFile, tempFile, model.getDelegate());
+ ConsumerPomArtifactTransformer t = new
ConsumerPomArtifactTransformer((s, p, f) -> {
+ try (InputStream is = Files.newInputStream(f)) {
+ return DefaultConsumerPomBuilder.transform(new
MavenStaxReader().read(is));
+ } catch (Exception e) {
Review Comment:
not needed, the exception fails the test
> 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)