Disable consumer POM flattening by default and add an opt-in feature#11347
Disable consumer POM flattening by default and add an opt-in feature#11347gnodet merged 8 commits intoapache:masterfrom
Conversation
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
ec3c886 to
67f11aa
Compare
- 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.
|
@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 |
…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
💚 All backports created successfully
Questions ?Please refer to the Backport tool documentation |
…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
…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
…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
…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
…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
…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
| * When set to <code>true</code> (default), consumer POMs are flattened by removing | ||
| * dependency management and keeping only direct dependencies with transitive scopes. | ||
| * When set to <code>false</code>, consumer POMs preserve dependency management |
There was a problem hiding this comment.
This says true is the default, but the code and the PR description says false is the default…?
| public static final String MAVEN_CONSUMER_POM = "maven.consumer.pom"; | ||
|
|
||
| /** | ||
| * User property for controlling consumer POM flattening behavior. |
There was a problem hiding this comment.
Do I understand correctly that this can only be controlled by a -D flag? So you cannot easily enable flattening on specific modules. I guess you could add -D to .mvn/maven.config if you wished to enable flattening on all modules in a given reactor (such as one Git repository). Has any thought been given to controlling this mode based on a flag set in the POM itself (if that is even possible)? Or as a configuration option to the install mojo, etc.?
Summary
This PR introduces a new feature flag
maven.consumer.pom.flattenthat 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
consumerPomFlatten()method to check the feature flag (defaults tofalse)Integration Tests
Feature Behavior
When
maven.consumer.pom.flatten=false(Default)When
maven.consumer.pom.flatten=true(Opt-in)Use Case Example
Consider this dependency scenario:
With
maven.consumer.pom.flatten=false(default):With
maven.consumer.pom.flatten=true:Benefits
Fixes #11346 and addresses dependency management inheritance scenarios