Skip to content

Commit 3d21d5f

Browse files
committed
[MNG-3309] Cascading profile activation
1 parent 3b24de6 commit 3d21d5f

File tree

11 files changed

+279
-252
lines changed

11 files changed

+279
-252
lines changed

impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/RepositorySystemSupplier.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.apache.maven.internal.impl.model.DefaultPluginManagementInjector;
4848
import org.apache.maven.internal.impl.model.DefaultProfileInjector;
4949
import org.apache.maven.internal.impl.model.DefaultProfileSelector;
50-
import org.apache.maven.internal.impl.model.ProfileActivationFilePathInterpolator;
5150
import org.apache.maven.internal.impl.model.rootlocator.DefaultRootLocator;
5251
import org.apache.maven.internal.impl.resolver.DefaultArtifactDescriptorReader;
5352
import org.apache.maven.internal.impl.resolver.DefaultModelResolver;
@@ -1049,14 +1048,12 @@ protected ModelBuilder createModelBuilder() {
10491048
new DefaultModelUrlNormalizer(new DefaultUrlNormalizer()),
10501049
new DefaultSuperPomProvider(modelProcessor),
10511050
new DefaultInheritanceAssembler(),
1052-
new DefaultProfileSelector(),
1051+
new DefaultProfileSelector(null, null),
10531052
new DefaultProfileInjector(),
10541053
new DefaultPluginManagementInjector(),
10551054
new DefaultDependencyManagementInjector(),
10561055
new DefaultDependencyManagementImporter(),
10571056
new DefaultPluginConfigurationExpander(),
1058-
new ProfileActivationFilePathInterpolator(
1059-
new DefaultPathTranslator(), new DefaultRootLocator(), new DefaultInterpolator()),
10601057
new DefaultModelVersionParser(getVersionScheme()),
10611058
List.of(),
10621059
new DefaultModelCacheFactory(),

impl/maven-impl/src/main/java/org/apache/maven/api/services/model/ProfileActivationContext.java

+16
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
*/
1919
package org.apache.maven.api.services.model;
2020

21+
import java.util.Collection;
2122
import java.util.List;
2223
import java.util.Map;
2324

2425
import org.apache.maven.api.annotations.Nonnull;
2526
import org.apache.maven.api.model.Model;
27+
import org.apache.maven.api.model.Profile;
2628

2729
/**
2830
* Describes the environmental context used to determine the activation status of profiles.
@@ -68,6 +70,20 @@ public interface ProfileActivationContext {
6870
@Nonnull
6971
Map<String, String> getUserProperties();
7072

73+
/**
74+
* Gets current calculated project properties
75+
*
76+
* @return The project properties, never {@code null}.
77+
*/
78+
Map<String, String> getProjectProperties();
79+
80+
/**
81+
* Inject properties from newly activated profiles in order to trigger the cascading mechanism.
82+
*
83+
* @param activatedProfiles The collection of profiles that have been activated that may trigger the cascading effect.
84+
*/
85+
void addProfileProperties(Collection<Profile> activatedProfiles);
86+
7187
/**
7288
* Gets the model which is being activated.
7389
*

impl/maven-impl/src/main/java/org/apache/maven/api/services/model/ProfileSelector.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,13 @@ public interface ProfileSelector {
3838
* @param context The environmental context used to determine the activation status of a profile, must not be
3939
* {@code null}.
4040
* @param problems The container used to collect problems that were encountered, must not be {@code null}.
41+
* @param cascade Indicates whether profile activation should cascade, i.e. properties from an activated profile may
42+
* trigger the activation of other profiles.
4143
* @return The profiles that have been activated, never {@code null}.
4244
*/
4345
List<Profile> getActiveProfiles(
44-
Collection<Profile> profiles, ProfileActivationContext context, ModelProblemCollector problems);
46+
Collection<Profile> profiles,
47+
ProfileActivationContext context,
48+
ModelProblemCollector problems,
49+
boolean cascade);
4550
}

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/SettingsUtilsV4.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ public static org.apache.maven.api.model.Profile convertFromSettingsProfile(Prof
237237
}
238238

239239
org.apache.maven.api.model.Profile value = profile.build();
240-
value.setSource("settings.xml");
240+
value.setSource(org.apache.maven.api.model.Profile.SOURCE_SETTINGS);
241241
return value;
242242
}
243243

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelBuilder.java

+41-212
Large diffs are not rendered by default.

impl/maven-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultProfileActivationContext.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@
1818
*/
1919
package org.apache.maven.internal.impl.model;
2020

21+
import java.util.Collection;
2122
import java.util.Collections;
23+
import java.util.HashMap;
2224
import java.util.List;
2325
import java.util.Map;
2426
import java.util.Properties;
2527
import java.util.stream.Collectors;
2628

2729
import org.apache.maven.api.model.Model;
30+
import org.apache.maven.api.model.Profile;
2831
import org.apache.maven.api.services.model.ProfileActivationContext;
2932

3033
/**
@@ -41,6 +44,8 @@ public class DefaultProfileActivationContext implements ProfileActivationContext
4144

4245
private Map<String, String> userProperties = Collections.emptyMap();
4346

47+
private Map<String, String> projectProperties = Collections.emptyMap();
48+
4449
private Model model;
4550

4651
@Override
@@ -142,10 +147,23 @@ public Model getModel() {
142147

143148
public DefaultProfileActivationContext setModel(Model model) {
144149
this.model = model;
145-
150+
this.projectProperties = unmodifiable(model.getProperties());
146151
return this;
147152
}
148153

154+
@Override
155+
public Map<String, String> getProjectProperties() {
156+
return projectProperties;
157+
}
158+
159+
public void addProfileProperties(Collection<Profile> profiles) {
160+
Map<String, String> props = new HashMap<>(this.projectProperties);
161+
for (var profile : profiles) {
162+
props.putAll(profile.getProperties());
163+
}
164+
this.projectProperties = unmodifiable(props);
165+
}
166+
149167
private static List<String> unmodifiable(List<String> list) {
150168
return list != null ? Collections.unmodifiableList(list) : Collections.emptyList();
151169
}

0 commit comments

Comments
 (0)