-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Disable consumer POM flattening by default and add an opt-in feature #11347
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
Disable consumer POM flattening by default and add an opt-in feature #11347
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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