-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Add ability to disable consumer POM flattening to preserve dependency management inheritance #11346
Description
Summary
Currently, Maven's consumer POM transformation flattens dependency management sections by default, which prevents dependency management from being inherited by consumers. This creates issues in scenarios where transitive dependency management inheritance is desired.
Use Case
Consider the following dependency scenario:
- Module A 1.0: depends on B 1.0 and manages C to version 1.2
- Module B 1.0: has no dependencies
- Module B 2.0: depends on C 1.1
- Module D: depends on A 1.0 and manages B to version 2.0
Expected Behavior
When Module D builds, it should resolve:
- B 2.0 (due to D's dependency management override)
- C 1.2 (due to A's dependency management, which should take precedence over B 2.0's direct dependency on C 1.1)
Current Problem
With consumer POM flattening enabled (default), Module A's consumer POM loses its dependency management section. This means when Module D consumes A 1.0, the dependency management for C 1.2 is not available, and Module D ends up with C 1.1 from B 2.0's direct dependency.
Desired Solution
A feature flag (e.g., maven.consumer.pom.flatten=false) that allows disabling consumer POM flattening, preserving dependency management sections in consumer POMs so they can be inherited by downstream consumers.
Integration Test
This use case is demonstrated by the integration test MavenITDependencyManagementOverrideTest which:
- Sets up the multi-module scenario described above
- Verifies that with flattening disabled, Module D correctly resolves C 1.2 instead of C 1.1
- Confirms that dependency management inheritance works as expected when consumer POMs preserve their dependency management sections
Question
- Should this be the default behaviour?