From e921f1564ef9460ca58745eb52e3967dbbd0b9e7 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Sun, 27 Nov 2022 16:49:43 +0100 Subject: [PATCH] [MNG-6609] Maven 3.9: profile activation by packaging (#849) Generate raw model before profile activation context is generated --- .../model/building/DefaultModelBuilder.java | 21 ++++++++++++------- .../profile/ProfileActivationContext.java | 6 ++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java index a2faac3000..23da7fea73 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java @@ -276,6 +276,14 @@ public class DefaultModelBuilder DefaultModelProblemCollector problems = new DefaultModelProblemCollector( result ); + // read and validate raw model + Model inputModel = request.getRawModel(); + if ( inputModel == null ) + { + inputModel = readModel( request.getModelSource(), request.getPomFile(), request, problems ); + request.setRawModel( inputModel ); + } + // profile activation DefaultProfileActivationContext profileActivationContext = getProfileActivationContext( request ); @@ -296,13 +304,6 @@ public class DefaultModelBuilder profileActivationContext.setUserProperties( profileProps ); } - // read and validate raw model - Model inputModel = request.getRawModel(); - if ( inputModel == null ) - { - inputModel = readModel( request.getModelSource(), request.getPomFile(), request, problems ); - } - problems.setRootModel( inputModel ); ModelData resultData = new ModelData( request.getModelSource(), inputModel ); @@ -707,7 +708,11 @@ public class DefaultModelBuilder context.setActiveProfileIds( request.getActiveProfileIds() ); context.setInactiveProfileIds( request.getInactiveProfileIds() ); context.setSystemProperties( request.getSystemProperties() ); - context.setUserProperties( request.getUserProperties() ); + // enrich user properties with project packaging + Properties userProperties = request.getUserProperties(); + userProperties.computeIfAbsent( (Object) ProfileActivationContext.PROPERTY_NAME_PACKAGING, + ( p ) -> (Object) request.getRawModel().getPackaging() ); + context.setUserProperties( userProperties ); context.setProjectDirectory( ( request.getPomFile() != null ) ? request.getPomFile().getParentFile() : null ); return context; diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java index d501e660a5..cd6bd48aca 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java @@ -30,6 +30,12 @@ import java.util.Map; */ public interface ProfileActivationContext { + /** + * Key of the property containing the project's packaging. + * Available in {@link #getUserProperties()}. + * @since 3.9 + */ + String PROPERTY_NAME_PACKAGING = "packaging"; /** * Gets the identifiers of those profiles that should be activated by explicit demand.