This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new 6197545c4a [MNG-8602] Fix BOM consumer pom (#2139) 6197545c4a is described below commit 6197545c4a8937134fcd7c22e9ccda1835ae0895 Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Tue Mar 4 11:12:26 2025 +0100 [MNG-8602] Fix BOM consumer pom (#2139) --- .../impl/DefaultConsumerPomBuilder.java | 146 +++++++++++---------- .../impl/ConsumerPomArtifactTransformerTest.java | 4 +- .../impl/ConsumerPomBuilderTest.java | 2 +- 3 files changed, 80 insertions(+), 72 deletions(-) diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java index 0944e054d1..e3164beba4 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/transformation/impl/DefaultConsumerPomBuilder.java @@ -22,7 +22,6 @@ import javax.inject.Named; import java.nio.file.Path; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -34,7 +33,6 @@ import org.apache.maven.api.PathScope; import org.apache.maven.api.SessionData; import org.apache.maven.api.model.Dependency; -import org.apache.maven.api.model.DependencyManagement; import org.apache.maven.api.model.DistributionManagement; import org.apache.maven.api.model.Model; import org.apache.maven.api.model.ModelBase; @@ -75,8 +73,12 @@ public Model build(RepositorySystemSession session, MavenProject project, Path s Model model = project.getModel().getDelegate(); String packaging = model.getPackaging(); String originalPackaging = project.getOriginalModel().getPackaging(); - if (POM_PACKAGING.equals(packaging) && !BOM_PACKAGING.equals(originalPackaging)) { - return buildPom(session, project, src); + if (POM_PACKAGING.equals(packaging)) { + if (BOM_PACKAGING.equals(originalPackaging)) { + return buildBom(session, project, src); + } else { + return buildPom(session, project, src); + } } else { return buildNonPom(session, project, src); } @@ -86,13 +88,20 @@ protected Model buildPom(RepositorySystemSession session, MavenProject project, throws ModelBuilderException { ModelBuilderResult result = buildModel(session, src); Model model = result.getRawModel(); - return transform(model, project); + return transformPom(model, project); + } + + protected Model buildBom(RepositorySystemSession session, MavenProject project, Path src) + throws ModelBuilderException { + ModelBuilderResult result = buildModel(session, src); + Model model = result.getEffectiveModel(); + return transformBom(model, project); } protected Model buildNonPom(RepositorySystemSession session, MavenProject project, Path src) throws ModelBuilderException { Model model = buildEffectiveModel(session, src); - return transform(model, project); + return transformNonPom(model, project); } private Model buildEffectiveModel(RepositorySystemSession session, Path src) throws ModelBuilderException { @@ -193,72 +202,71 @@ private ModelBuilderResult buildModel(RepositorySystemSession session, Path src) return result; } - static Model transform(Model model, MavenProject project) { - String packaging = model.getPackaging(); + static Model transformNonPom(Model model, MavenProject project) { boolean preserveModelVersion = model.isPreserveModelVersion(); - if (POM_PACKAGING.equals(packaging)) { - // raw to consumer transform - model = model.withRoot(false).withModules(null).withSubprojects(null); - if (model.getParent() != null) { - model = model.withParent(model.getParent().withRelativePath(null)); - } - if (!preserveModelVersion) { - model = model.withPreserveModelVersion(false); - String modelVersion = new MavenModelVersion().getModelVersion(model); - model = model.withModelVersion(modelVersion); - } - } else if (BOM_PACKAGING.equals(packaging)) { - DependencyManagement dependencyManagement = - project.getOriginalModel().getDependencyManagement().getDelegate(); - List<Dependency> dependencies = new ArrayList<>(); - String version = model.getVersion(); - - dependencyManagement - .getDependencies() - .forEach((dependency) -> dependencies.add(dependency.withVersion(version))); - Model.Builder builder = prune( - Model.newBuilder(model, true) - .preserveModelVersion(false) - .root(false) - .parent(null) - .dependencyManagement(dependencyManagement.withDependencies(dependencies)) - .build(null), - model); - builder.packaging(POM_PACKAGING); - builder.profiles(prune(model.getProfiles())); - - model = builder.build(); - String modelVersion = new MavenModelVersion().getModelVersion(model); - if (!ModelBuilder.MODEL_VERSION_4_0_0.equals(modelVersion) && !preserveModelVersion) { - warnNotDowngraded(project); - } - model = model.withModelVersion(modelVersion); - } else { - Model.Builder builder = prune( - Model.newBuilder(model, true) - .preserveModelVersion(false) - .root(false) - .parent(null) - .build(null), - model) - .mailingLists(null) - .issueManagement(null) - .scm( - model.getScm() != null - ? Scm.newBuilder(model.getScm(), true) - .childScmConnectionInheritAppendPath(null) - .childScmUrlInheritAppendPath(null) - .childScmDeveloperConnectionInheritAppendPath(null) - .build() - : null); - builder.profiles(prune(model.getProfiles())); - - model = builder.build(); + Model.Builder builder = prune( + Model.newBuilder(model, true) + .preserveModelVersion(false) + .root(false) + .parent(null) + .build(null), + model) + .mailingLists(null) + .issueManagement(null) + .scm( + model.getScm() != null + ? Scm.newBuilder(model.getScm(), true) + .childScmConnectionInheritAppendPath(null) + .childScmUrlInheritAppendPath(null) + .childScmDeveloperConnectionInheritAppendPath(null) + .build() + : null); + builder.profiles(prune(model.getProfiles())); + + model = builder.build(); + String modelVersion = new MavenModelVersion().getModelVersion(model); + if (!ModelBuilder.MODEL_VERSION_4_0_0.equals(modelVersion) && !preserveModelVersion) { + warnNotDowngraded(project); + } + model = model.withModelVersion(modelVersion); + return model; + } + + static Model transformBom(Model model, MavenProject project) { + boolean preserveModelVersion = model.isPreserveModelVersion(); + + Model.Builder builder = prune( + Model.newBuilder(model, true) + .preserveModelVersion(false) + .root(false) + .parent(null) + .build(null), + model); + builder.packaging(POM_PACKAGING); + builder.profiles(prune(model.getProfiles())); + + model = builder.build(); + String modelVersion = new MavenModelVersion().getModelVersion(model); + if (!ModelBuilder.MODEL_VERSION_4_0_0.equals(modelVersion) && !preserveModelVersion) { + warnNotDowngraded(project); + } + model = model.withModelVersion(modelVersion); + return model; + } + + static Model transformPom(Model model, MavenProject project) { + boolean preserveModelVersion = model.isPreserveModelVersion(); + + // raw to consumer transform + model = model.withRoot(false).withModules(null).withSubprojects(null); + if (model.getParent() != null) { + model = model.withParent(model.getParent().withRelativePath(null)); + } + + if (!preserveModelVersion) { + model = model.withPreserveModelVersion(false); String modelVersion = new MavenModelVersion().getModelVersion(model); - if (!ModelBuilder.MODEL_VERSION_4_0_0.equals(modelVersion) && !preserveModelVersion) { - warnNotDowngraded(project); - } model = model.withModelVersion(modelVersion); } return model; diff --git a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java index ed002978e9..4f38473861 100644 --- a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java +++ b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomArtifactTransformerTest.java @@ -56,7 +56,7 @@ void transform() throws Exception { project.setOriginalModel(model); DefaultConsumerPomArtifactTransformer t = new DefaultConsumerPomArtifactTransformer((s, p, f) -> { try (InputStream is = Files.newInputStream(f)) { - return DefaultConsumerPomBuilder.transform(new MavenStaxReader().read(is), project); + return DefaultConsumerPomBuilder.transformPom(new MavenStaxReader().read(is), project); } }); @@ -83,7 +83,7 @@ void transformJarConsumerPom() throws Exception { project.setOriginalModel(model); DefaultConsumerPomArtifactTransformer t = new DefaultConsumerPomArtifactTransformer((s, p, f) -> { try (InputStream is = Files.newInputStream(f)) { - return DefaultConsumerPomBuilder.transform(new MavenStaxReader().read(is), project); + return DefaultConsumerPomBuilder.transformNonPom(new MavenStaxReader().read(is), project); } }); diff --git a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java index d627796b13..5bd7947952 100644 --- a/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java +++ b/impl/maven-core/src/test/java/org/apache/maven/internal/transformation/impl/ConsumerPomBuilderTest.java @@ -153,7 +153,7 @@ void testScmInheritance() throws Exception { .childScmDeveloperConnectionInheritAppendPath("true") .build()) .build(); - Model transformed = DefaultConsumerPomBuilder.transform(model, null); + Model transformed = DefaultConsumerPomBuilder.transformNonPom(model, null); assertNull(transformed.getScm().getChildScmConnectionInheritAppendPath()); assertNull(transformed.getScm().getChildScmUrlInheritAppendPath()); assertNull(transformed.getScm().getChildScmDeveloperConnectionInheritAppendPath());