Skip to content

Commit 8e867a6

Browse files
committed
Consumer POM of multi-module project should exclude <build> and <dependencies> elements.
1 parent 6f0294d commit 8e867a6

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public void injectTransformedArtifacts(RepositorySystemSession session, MavenPro
9696
}
9797
}
9898

99-
TransformedArtifact createConsumerPomArtifact(
99+
private TransformedArtifact createConsumerPomArtifact(
100100
MavenProject project, Path consumer, RepositorySystemSession session) {
101101
Path actual = project.getFile().toPath();
102102
Path parent = project.getBaseDirectory();

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

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.maven.api.Node;
3333
import org.apache.maven.api.PathScope;
3434
import org.apache.maven.api.SessionData;
35+
import org.apache.maven.api.SourceRoot;
3536
import org.apache.maven.api.feature.Features;
3637
import org.apache.maven.api.model.Dependency;
3738
import org.apache.maven.api.model.DistributionManagement;
@@ -342,7 +343,7 @@ static Model transformNonPom(Model model, MavenProject project) {
342343
return model;
343344
}
344345

345-
static Model transformBom(Model model, MavenProject project) {
346+
private static Model transformBom(Model model, MavenProject project) {
346347
boolean preserveModelVersion = model.isPreserveModelVersion();
347348

348349
Model.Builder builder = prune(
@@ -372,7 +373,13 @@ static Model transformPom(Model model, MavenProject project) {
372373
if (model.getParent() != null) {
373374
model = model.withParent(model.getParent().withRelativePath(null));
374375
}
375-
376+
if (isModular(project)) {
377+
// Build information are not really needed by consumers. Removed because the <source> elements
378+
// are not compatible with Maven 4.0.0 model, and the remaining is not valid without them.
379+
model = model.withBuild(null);
380+
// Dependencies are dispatched by maven-jar-plugin in the POM generated for each module.
381+
model = model.withDependencies(null);
382+
}
376383
if (!preserveModelVersion) {
377384
model = model.withPreserveModelVersion(false);
378385
String modelVersion = new MavenModelVersion().getModelVersion(model);
@@ -381,7 +388,22 @@ static Model transformPom(Model model, MavenProject project) {
381388
return model;
382389
}
383390

384-
static void warnNotDowngraded(MavenProject project) {
391+
/**
392+
* Whether the given project is modular. This method returns {@code true} it at least one enabled
393+
* {@code <source>} element declares a Java modules. While modular and non-modular sources should
394+
* not be mixed, this code is tolerant to such mixes because non-modular source elements may have
395+
* been incorrectly generated by non module-aware codes, in which case they should be ignored.
396+
*/
397+
private static boolean isModular(MavenProject project) {
398+
for (SourceRoot source : project.getSourceRoots()) {
399+
if (source.enabled() && source.module().isPresent()) {
400+
return true;
401+
}
402+
}
403+
return false;
404+
}
405+
406+
private static void warnNotDowngraded(MavenProject project) {
385407
LOGGER.warn("The consumer POM for " + project.getId() + " cannot be downgraded to 4.0.0. "
386408
+ "If you intent your build to be consumed with Maven 3 projects, you need to remove "
387409
+ "the features that request a newer model version. If you're fine with having the "

0 commit comments

Comments
 (0)