Skip to content

Commit 5029cc2

Browse files
authored
[MNG-8012] Warn if in-reactor BOM import happens (#1434)
This should be in fact prevented IMHO. Also, model builder missed File uses are corrected. --- https://issues.apache.org/jira/browse/MNG-8012
1 parent 9780ca1 commit 5029cc2

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed

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

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,17 @@
2525
import java.io.File;
2626
import java.io.IOException;
2727
import java.lang.reflect.Field;
28-
import java.util.*;
28+
import java.nio.file.Path;
29+
import java.util.ArrayList;
30+
import java.util.Collection;
31+
import java.util.HashMap;
32+
import java.util.Iterator;
33+
import java.util.LinkedHashSet;
34+
import java.util.List;
35+
import java.util.Map;
36+
import java.util.Objects;
37+
import java.util.Optional;
38+
import java.util.Properties;
2939
import java.util.concurrent.Callable;
3040
import java.util.function.Supplier;
3141
import java.util.stream.Collectors;
@@ -1032,14 +1042,27 @@ private DefaultModelBuildingResult asDefaultModelBuildingResult(ModelBuildingRes
10321042
}
10331043
}
10341044

1045+
@Deprecated
10351046
@Override
10361047
public Result<? extends Model> buildRawModel(File pomFile, int validationLevel, boolean locationTracking) {
1048+
return buildRawModel(pomFile.toPath(), validationLevel, locationTracking, null);
1049+
}
1050+
1051+
@Override
1052+
public Result<? extends Model> buildRawModel(Path pomFile, int validationLevel, boolean locationTracking) {
10371053
return buildRawModel(pomFile, validationLevel, locationTracking, null);
10381054
}
10391055

1056+
@Deprecated
10401057
@Override
10411058
public Result<? extends Model> buildRawModel(
10421059
File pomFile, int validationLevel, boolean locationTracking, TransformerContext context) {
1060+
return buildRawModel(pomFile.toPath(), validationLevel, locationTracking, context);
1061+
}
1062+
1063+
@Override
1064+
public Result<? extends Model> buildRawModel(
1065+
Path pomFile, int validationLevel, boolean locationTracking, TransformerContext context) {
10431066
final ModelBuildingRequest request = new DefaultModelBuildingRequest()
10441067
.setValidationLevel(validationLevel)
10451068
.setLocationTracking(locationTracking)
@@ -1050,7 +1073,7 @@ public Result<? extends Model> buildRawModel(
10501073

10511074
try {
10521075
if (transformer != null && context != null) {
1053-
transformer.transform(pomFile.toPath(), context, model);
1076+
transformer.transform(pomFile, context, model);
10541077
}
10551078
} catch (TransformerException e) {
10561079
problems.add(
@@ -1830,6 +1853,15 @@ private org.apache.maven.api.model.DependencyManagement doLoadDependencyManageme
18301853
return null;
18311854
}
18321855

1856+
if (importSource instanceof FileModelSource && request.getRootDirectory() != null) {
1857+
Path sourcePath = ((FileModelSource) importSource).getPath();
1858+
if (sourcePath.startsWith(request.getRootDirectory())) {
1859+
problems.add(new ModelProblemCollectorRequest(Severity.WARNING, ModelProblem.Version.BASE)
1860+
.setMessage("BOM imports from within reactor should be avoided")
1861+
.setLocation(dependency.getLocation("")));
1862+
}
1863+
}
1864+
18331865
final ModelBuildingResult importResult;
18341866
try {
18351867
ModelBuildingRequest importRequest = new DefaultModelBuildingRequest();

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.maven.model.building;
2020

2121
import java.io.File;
22+
import java.nio.file.Path;
2223

2324
import org.apache.maven.model.Model;
2425

@@ -52,11 +53,31 @@ public interface ModelBuilder {
5253

5354
/**
5455
* Performs only the part of {@link ModelBuilder#build(ModelBuildingRequest)} that loads the raw model
56+
*
57+
* @deprecated Use {@link #buildRawModel(Path, int, boolean)} instead.
5558
*/
59+
@Deprecated
5660
Result<? extends Model> buildRawModel(File pomFile, int validationLevel, boolean locationTracking);
5761

62+
/**
63+
* Performs only the part of {@link ModelBuilder#build(ModelBuildingRequest)} that loads the raw model
64+
*
65+
* @since 4.0.0
66+
*/
67+
Result<? extends Model> buildRawModel(Path pomFile, int validationLevel, boolean locationTracking);
68+
69+
/**
70+
* @deprecated Use {@link #buildRawModel(Path, int, boolean, TransformerContext)} instead.
71+
*/
72+
@Deprecated
5873
Result<? extends Model> buildRawModel(
5974
File pomFile, int validationLevel, boolean locationTracking, TransformerContext context);
6075

76+
/**
77+
* @since 4.0.0
78+
*/
79+
Result<? extends Model> buildRawModel(
80+
Path pomFile, int validationLevel, boolean locationTracking, TransformerContext context);
81+
6182
TransformerContextBuilder newTransformerContextBuilder();
6283
}

0 commit comments

Comments
 (0)