Skip to content

Commit f137c13

Browse files
authored
[MNG-8190] Restrict build pom feature to 4.1.0 model version (#1707)
1 parent e6d038a commit f137c13

File tree

8 files changed

+71
-64
lines changed

8 files changed

+71
-64
lines changed

api/maven-api-core/src/main/java/org/apache/maven/api/Constants.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,5 +273,13 @@ public final class Constants {
273273
@Config(type = "java.lang.Integer", defaultValue = "cores/2 + 1")
274274
public static final String MAVEN_PROJECT_BUILDER_PARALLELISM = "maven.projectBuilder.parallelism";
275275

276+
/**
277+
* User property for enabling/disabling the consumer POM feature.
278+
*
279+
* @since 4.0.0
280+
*/
281+
@Config(type = "java.lang.Boolean", defaultValue = "true")
282+
public static final String MAVEN_CONSUMER_POM = "maven.consumer.pom";
283+
276284
private Constants() {}
277285
}

api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.Map;
2222
import java.util.Properties;
2323

24+
import org.apache.maven.api.Constants;
2425
import org.apache.maven.api.Session;
2526
import org.apache.maven.api.annotations.Nullable;
2627

@@ -32,32 +33,27 @@
3233
*/
3334
public final class Features {
3435

35-
/**
36-
* Name of the Maven user property to enable or disable the build/consumer POM feature.
37-
*/
38-
public static final String BUILDCONSUMER = "maven.buildconsumer";
39-
4036
private Features() {}
4137

4238
/**
43-
* Check if the build/consumer POM feature is active.
39+
* Check if the consumer POM feature is active.
4440
*/
45-
public static boolean buildConsumer(@Nullable Properties userProperties) {
46-
return doGet(userProperties, BUILDCONSUMER, true);
41+
public static boolean consumerPom(@Nullable Properties userProperties) {
42+
return doGet(userProperties, Constants.MAVEN_CONSUMER_POM, true);
4743
}
4844

4945
/**
50-
* Check if the build/consumer POM feature is active.
46+
* Check if the consumer POM feature is active.
5147
*/
52-
public static boolean buildConsumer(@Nullable Map<String, String> userProperties) {
53-
return doGet(userProperties, BUILDCONSUMER, true);
48+
public static boolean consumerPom(@Nullable Map<String, String> userProperties) {
49+
return doGet(userProperties, Constants.MAVEN_CONSUMER_POM, true);
5450
}
5551

5652
/**
57-
* Check if the build/consumer POM feature is active.
53+
* Check if the consumer POM feature is active.
5854
*/
59-
public static boolean buildConsumer(@Nullable Session session) {
60-
return buildConsumer(session != null ? session.getUserProperties() : null);
55+
public static boolean consumerPom(@Nullable Session session) {
56+
return consumerPom(session != null ? session.getUserProperties() : null);
6157
}
6258

6359
private static boolean doGet(Properties userProperties, String key, boolean def) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.apache.maven.api.di.Inject;
4848
import org.apache.maven.api.di.Named;
4949
import org.apache.maven.api.di.Singleton;
50-
import org.apache.maven.api.feature.Features;
5150
import org.apache.maven.api.model.Activation;
5251
import org.apache.maven.api.model.ActivationFile;
5352
import org.apache.maven.api.model.Build;
@@ -302,7 +301,8 @@ private Model readEffectiveModel(
302301
problems.setRootModel(inputModel);
303302

304303
ModelData resultData = new ModelData(request.getSource(), inputModel);
305-
String superModelVersion = inputModel.getModelVersion() != null ? inputModel.getModelVersion() : "4.0.0";
304+
String superModelVersion =
305+
inputModel.getModelVersion() != null ? inputModel.getModelVersion() : MODEL_VERSION_4_0_0;
306306
if (!VALID_MODEL_VERSIONS.contains(superModelVersion)) {
307307
// Maven 3.x is always using 4.0.0 version to load the supermodel, so
308308
// do the same when loading a dependency. The model validator will also
@@ -790,7 +790,7 @@ private ModelData doReadRawModel(
790790
ModelSource modelSource, ModelBuilderRequest request, DefaultModelProblemCollector problems)
791791
throws ModelBuilderException {
792792
Model rawModel = readFileModel(request, problems);
793-
if (Features.buildConsumer(request.getUserProperties()) && modelSource.getPath() != null) {
793+
if (!MODEL_VERSION_4_0_0.equals(rawModel.getModelVersion()) && modelSource.getPath() != null) {
794794
Path pomFile = modelSource.getPath();
795795

796796
try {

maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomArtifactTransformer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void injectTransformedArtifacts(RepositorySystemSession session, MavenPro
8080
// If there is no build POM there is no reason to inject artifacts for the consumer POM.
8181
return;
8282
}
83-
if (Features.buildConsumer(session.getUserProperties())) {
83+
if (Features.consumerPom(session.getUserProperties())) {
8484
Path buildDir =
8585
project.getBuild() != null ? Paths.get(project.getBuild().getDirectory()) : null;
8686
if (buildDir != null) {
@@ -133,14 +133,14 @@ private void doDeleteFiles() {
133133
}
134134

135135
public InstallRequest remapInstallArtifacts(RepositorySystemSession session, InstallRequest request) {
136-
if (Features.buildConsumer(session.getUserProperties()) && consumerPomPresent(request.getArtifacts())) {
136+
if (Features.consumerPom(session.getUserProperties()) && consumerPomPresent(request.getArtifacts())) {
137137
request.setArtifacts(replacePom(request.getArtifacts()));
138138
}
139139
return request;
140140
}
141141

142142
public DeployRequest remapDeployArtifacts(RepositorySystemSession session, DeployRequest request) {
143-
if (Features.buildConsumer(session.getUserProperties()) && consumerPomPresent(request.getArtifacts())) {
143+
if (Features.consumerPom(session.getUserProperties()) && consumerPomPresent(request.getArtifacts())) {
144144
request.setArtifacts(replacePom(request.getArtifacts()));
145145
}
146146
return request;

maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
import org.apache.maven.api.Constants;
6161
import org.apache.maven.api.Session;
6262
import org.apache.maven.api.SessionData;
63-
import org.apache.maven.api.feature.Features;
6463
import org.apache.maven.api.model.Build;
6564
import org.apache.maven.api.model.Dependency;
6665
import org.apache.maven.api.model.DependencyManagement;
@@ -541,11 +540,9 @@ List<ProjectBuildingResult> doBuild(List<File> pomFiles, boolean recursive) {
541540
// Phase 2: get effective models from the reactor
542541
List<ProjectBuildingResult> results = build(projectIndex, interimResults);
543542

544-
if (Features.buildConsumer(request.getUserProperties())) {
545-
request.getRepositorySession()
546-
.getData()
547-
.set(ModelTransformerContext.KEY, transformerContextBuilder.build());
548-
}
543+
request.getRepositorySession()
544+
.getData()
545+
.set(ModelTransformerContext.KEY, transformerContextBuilder.build());
549546

550547
return results;
551548
} finally {

maven-docgen/src/main/java/org/apache/maven/tools/CollectConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public void visitEnd() {
152152
: "java.lang.String")) {
153153
case "java.lang.String" -> "String";
154154
case "java.lang.Integer" -> "Integer";
155+
case "java.lang.Boolean" -> "Boolean";
155156
default -> throw new IllegalStateException();
156157
};
157158
discoveredKeys.put(

maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import java.util.stream.Stream;
4444

4545
import org.apache.maven.api.VersionRange;
46-
import org.apache.maven.api.feature.Features;
4746
import org.apache.maven.api.model.ActivationFile;
4847
import org.apache.maven.api.model.Exclusion;
4948
import org.apache.maven.api.model.InputSource;
@@ -97,6 +96,7 @@
9796
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
9897
import org.eclipse.sisu.Nullable;
9998

99+
import static org.apache.maven.api.services.ModelBuilder.MODEL_VERSION_4_0_0;
100100
import static org.apache.maven.model.building.Result.error;
101101
import static org.apache.maven.model.building.Result.newResult;
102102

@@ -774,12 +774,13 @@ private Model readEffectiveModel(
774774
problems.setRootModel(inputModel);
775775

776776
ModelData resultData = new ModelData(request.getModelSource(), inputModel);
777-
String superModelVersion = inputModel.getModelVersion() != null ? inputModel.getModelVersion() : "4.0.0";
777+
String superModelVersion =
778+
inputModel.getModelVersion() != null ? inputModel.getModelVersion() : MODEL_VERSION_4_0_0;
778779
if (!DefaultModelValidator.VALID_MODEL_VERSIONS.contains(superModelVersion)) {
779780
// Maven 3.x is always using 4.0.0 version to load the supermodel, so
780781
// do the same when loading a dependency. The model validator will also
781782
// check that field later.
782-
superModelVersion = "4.0.0";
783+
superModelVersion = MODEL_VERSION_4_0_0;
783784
}
784785
ModelData superData = new ModelData(null, getSuperModel(superModelVersion));
785786

@@ -1251,19 +1252,22 @@ private ModelData doReadRawModel(
12511252
ModelSource modelSource, ModelBuildingRequest request, DefaultModelProblemCollector problems)
12521253
throws ModelBuildingException {
12531254
Model rawModel;
1254-
if (Features.buildConsumer(request.getUserProperties()) && modelSource instanceof FileModelSource) {
1255+
if (modelSource instanceof FileModelSource) {
12551256
rawModel = readFileModel(request, problems);
1256-
File pomFile = ((FileModelSource) modelSource).getFile();
12571257

1258-
try {
1259-
if (request.getTransformerContextBuilder() != null) {
1260-
TransformerContext context =
1261-
request.getTransformerContextBuilder().initialize(request, problems);
1262-
transformer.transform(pomFile.toPath(), context, rawModel);
1258+
if (!MODEL_VERSION_4_0_0.equals(rawModel.getModelVersion())) {
1259+
File pomFile = ((FileModelSource) modelSource).getFile();
1260+
1261+
try {
1262+
if (request.getTransformerContextBuilder() != null) {
1263+
TransformerContext context =
1264+
request.getTransformerContextBuilder().initialize(request, problems);
1265+
transformer.transform(pomFile.toPath(), context, rawModel);
1266+
}
1267+
} catch (TransformerException e) {
1268+
problems.add(
1269+
new ModelProblemCollectorRequest(Severity.FATAL, ModelProblem.Version.V40).setException(e));
12631270
}
1264-
} catch (TransformerException e) {
1265-
problems.add(
1266-
new ModelProblemCollectorRequest(Severity.FATAL, ModelProblem.Version.V40).setException(e));
12671271
}
12681272
} else if (request.getFileModel() == null) {
12691273
rawModel = readFileModel(request, problems);

0 commit comments

Comments
 (0)