Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MNG-8602] Fix BOM consumer pom #2139

Merged
merged 2 commits into from
Mar 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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 {
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
});

Expand All @@ -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);
}
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down