Skip to content

Conversation

@gnodet
Copy link
Contributor

@gnodet gnodet commented Oct 28, 2025

Summary

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Changes

Core Implementation

  • Features.java: Added consumerPomFlatten() method to check the feature flag (defaults to false)
  • DefaultConsumerPomBuilder: Enhanced to conditionally apply flattening based on the flag
  • Constants.java: Added comprehensive documentation for the new feature flag and improved existing documentation
  • Dependency management control: When disabled, consumer POMs preserve dependency management like parent POMs

Integration Tests

Feature Behavior

When maven.consumer.pom.flatten=false (Default)

  • Dependency management preserved: Consumer POMs keep dependency management sections like parent POMs
  • Inheritance enabled: Allows dependency management to be inherited by consumers
  • Non-POM projects: Processed without flattening dependency management
  • Backward compatible: Maintains existing dependency resolution behavior

When maven.consumer.pom.flatten=true (Opt-in)

  • Dependency management removed: Consumer POMs are flattened by removing dependency management
  • Transitive dependencies only: Only direct dependencies with transitive scopes are kept
  • Traditional behavior: Matches the previous Maven consumer POM behavior

Use Case Example

Consider this dependency scenario:

  • A 1.0 depends on B 1.0 and manages C to 1.2
  • B 2.0 depends on C 1.1
  • D depends on A 1.0 and manages B to 2.0

With maven.consumer.pom.flatten=false (default):

  • D gets C 1.2 (A's dependency management applies to D's transitive dependencies)
  • Consumer POMs preserve dependency management for inheritance

With maven.consumer.pom.flatten=true:

  • Traditional flattened consumer POM behavior
  • Dependency management sections are removed

Benefits

  • Better dependency management: Allows dependency management inheritance from consumer POMs
  • Flexible control: Users can choose between flattened and non-flattened consumer POMs
  • Improved transitive dependency control: Dependency management can properly control transitive dependency versions
  • Opt-in safety: Users can choose when to enable the previous flattening behavior

Fixes #11346 and addresses dependency management inheritance scenarios

@gnodet gnodet added enhancement New feature or request backport-to-4.0.x labels Oct 28, 2025
This commit introduces a new feature flag 'maven.consumer.pom.flatten'
that allows users to control whether consumer POMs are flattened or
preserve their dependency management sections.

Key changes:
- Added MAVEN_CONSUMER_POM_FLATTEN constant in Constants.java
- Added consumerPomFlatten() method in Features.java
- Modified DefaultConsumerPomBuilder to conditionally apply flattening
- Added integration test MavenITgh11346DependencyManagementOverrideTest
- Renamed test resources to follow GitHub issue naming convention

When maven.consumer.pom.flatten=false, consumer POMs preserve dependency
management like parent POMs, enabling dependency management inheritance
by consumers. This addresses scenarios where transitive dependency
management is crucial for maintaining consistent dependency versions.

The feature maintains backward compatibility with current default
behavior (flattening enabled) while providing opt-in control for
projects that need dependency management inheritance.

Fixes apache#11346
@gnodet gnodet force-pushed the gh-11346-consumer-pom-flatten-control branch from ec3c886 to 67f11aa Compare October 28, 2025 22:16
- Add CONSUMER_POM_FLATTENING feature flag to Constants and Features
- Update DefaultConsumerPomBuilder to respect flattening feature flag
- Update integration tests to use proper @SInCE annotations and test ordering
- Ensure consumer POM functionality works correctly with feature flag control

This commit addresses consumer POM flattening control and ensures proper
integration test coverage for the new functionality.
@gnodet gnodet added the breaking Pull requests that break existing features label Oct 29, 2025
@gnodet gnodet requested a review from cstamas October 29, 2025 16:06
@gnodet gnodet changed the title Add consumer POM flattening control feature Disable consumer POM flattening by default and add an opt-in feature Oct 29, 2025
@gnodet
Copy link
Contributor Author

gnodet commented Oct 29, 2025

@Bukama fwiw, if we go this way, this will require an update to https://maven.apache.org/whatsnewinmaven4.html#Consumer_POM and will require a 4.0.0-rc-5 release imho.

@gnodet gnodet merged commit d213b58 into apache:master Oct 31, 2025
37 of 38 checks passed
@github-actions github-actions bot added this to the 4.1.0 milestone Oct 31, 2025
gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java
@gnodet
Copy link
Contributor Author

gnodet commented Oct 31, 2025

💚 All backports created successfully

Status Branch Result
maven-4.0.x

Questions ?

Please refer to the Backport tool documentation

gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java
gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java
gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java
gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java

# Conflicts:
#	its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java
gnodet added a commit to gnodet/maven that referenced this pull request Oct 31, 2025
…pache#11347)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes apache#11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java

# Conflicts:
#	its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java
gnodet added a commit that referenced this pull request Oct 31, 2025
…11347) (#11370)

This PR introduces a new feature flag maven.consumer.pom.flatten that allows users to control whether consumer POMs are flattened by removing dependency management sections. This addresses dependency management inheritance scenarios and provides better control over consumer POM generation.

The consumer POM are NOT flattened anymore by default.

Fixes #11346

(cherry picked from commit d213b58)

# Conflicts:
#	api/maven-api-core/src/main/java/org/apache/maven/api/feature/Features.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5102MixinsTest.java
#	its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng8750NewScopesTest.java

# Conflicts:
#	its/core-it-suite/src/test/java/org/apache/maven/it/TestSuiteOrdering.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-to-4.0.x breaking Pull requests that break existing features enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add ability to disable consumer POM flattening to preserve dependency management inheritance

2 participants