gnodet opened a new pull request, #2407: URL: https://github.com/apache/maven/pull/2407
## ๐ Maven Upgrade Tool (mvnup) Introduces a comprehensive Maven upgrade tool for migrating projects from Maven 3.x (4.0.0 models) to Maven 4.1.0 format with intelligent inference optimizations. ## โจ Key Features ### Core Upgrade Capabilities - **Model Version Upgrades**: 4.0.0 โ 4.1.0 transformation - **Namespace Updates**: Automatic migration to Maven 4.1.0 namespace and schema - **Module Conversion**: `<modules>` โ `<subprojects>` and `<module>` โ `<subproject>` - **Two-Phase Process**: Separate upgrade and inference steps for safety - **Check/Apply Modes**: Preview changes before applying them ### ๐ง Intelligent Inference (--infer) #### Limited Inference for 4.0.0 Models (Maven 3.x POMs) - Removes child `<groupId>` when it matches parent groupId - Removes child `<version>` when it matches parent version - Maintains compatibility with Maven 3.x structure #### Full Inference for 4.1.0+ Models - **ModelVersion removal** (inference-enabled) - **Root attribute** addition (`root="true"`) - **Parent element trimming** with relativePath resolution - **Managed dependency cleanup** for project artifacts - **Cross-dependency inference** (main/profile/plugin dependencies) - **Redundant subprojects removal** when matching directory structure ### ๐๏ธ Enterprise-Ready Features - **Multi-module support** with recursive POM discovery - **GAV resolution** with parent inheritance - **Cross-module inference** using project knowledge - **RelativePath resolution** for intelligent parent handling - **Format preservation** (whitespace, comments, line separators) ## ๐ฏ Usage Examples ```bash # Check what changes would be made mvnup check --model 4.1.0 # Apply upgrades with inference optimizations mvnup apply --model 4.1.0 --infer # Upgrade specific directory mvnup apply --model 4.1.0 --directory /path/to/project ``` ## ๐งช Quality Assurance - **Comprehensive test suite**: 21 test cases covering all scenarios - **Maven400InferenceTest**: 6 specialized tests for 4.0.0 model handling - **Proper mocking**: Context never null, following best practices - **Format preservation**: Maintains original POM formatting - **Multi-module validation**: Cross-project inference testing ## ๐ง Technical Implementation ### Architecture - **Goal-based design**: `Check`, `Apply`, `Help` goals - **JDOM2 integration**: Robust XML processing with format preservation - **Dependency injection**: `@Named` and `@Singleton` components - **Modular structure**: Separate concerns for discovery, transformation, inference ### Key Components - `BaseUpgradeGoal`: Core upgrade logic with comprehensive inference - `PomDiscovery`: Recursive project structure analysis - `UpgradeContext`: Centralized context management - `JDomPomTransformer`: Format-preserving XML transformations ### Inference Logic Correctly reverses Maven 4's inference mechanisms: - **4.0.0 models**: Limited parent inheritance (groupId/version only) - **4.1.0+ models**: Full inference including relativePath resolution - **Cross-module awareness**: Uses project GAV knowledge for smart decisions ## ๐ Impact - **49 files changed**: Comprehensive implementation - **6,828 insertions**: Substantial feature addition - **Zero regressions**: All existing tests pass - **Future-ready**: Extensible for additional model versions ## ๐ Testing All tests pass (169 total including 6 new Maven 4.0.0 inference tests): ```bash mvn test -Dtest="*Test" -pl impl/maven-cli ``` ## ๐ Documentation Comprehensive javadoc added to `BaseUpgradeGoal` documenting: - All supported upgrade types - Inference optimization details - Multi-module project handling - Format preservation guarantees --- This implementation provides a robust foundation for Maven project upgrades while maintaining backward compatibility and offering intelligent optimizations for modern Maven 4 features. --- Pull Request opened by [Augment Code](https://www.augmentcode.com/) with guidance from the PR author -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org