Fix CI-friendly version processing with profile properties (fixes #11196) #11214
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
Changes to
${revision}
in profiles do not propagate to the final project version in Maven 4. This regression from Maven 3 occurs because CI-friendly version processing happens before profile activation, so profile properties are not available during version resolution.Example of the issue:
mvn clean
→ version:0.2.0+dev
✅mvn clean -Prelease
→ version:0.2.0+dev
❌ (should be0.2.0
)Root Cause:
In Maven 4, the model building sequence is:
This means profile properties are not available when CI-friendly versions are resolved.
Solution:
Implement enhanced property resolution that performs lightweight profile activation during CI-friendly version processing. This ensures profile properties are available for both version resolution and repository URL interpolation.
Key Changes
1. Enhanced Property Resolution (
DefaultModelBuilder.java
)getEnhancedProperties(Model model)
: New method that performs profile-aware property resolutiongetPropertiesWithProfiles(Model model, Map<String, String> baseProperties)
: Performs lightweight profile activation2. Directory Properties Integration
basedir
,project.basedir
,project.rootDirectory
) to be available during profile activation3. Comprehensive Test Coverage
DefaultModelBuilderTest.java
with 3 new test methodsMavenITmng11196CIFriendlyProfilesTest.java
reproducing the exact GitHub issueBenefits
Additional Use Cases Enabled
Repository URLs with Profile Properties
File-based Profile Activation with Directory Properties
Testing
The implementation includes comprehensive test coverage:
Unit Tests:
testCiFriendlyVersionWithProfiles()
: Basic profile-based CI-friendly versionstestRepositoryUrlInterpolationWithProfiles()
: Repository URL interpolation with profilestestDirectoryPropertiesInProfilesAndRepositories()
: Directory properties in profilesIntegration Tests:
MavenITmng11196CIFriendlyProfilesTest
: Reproduces the exact GitHub issue scenarioVerification
After the fix:
mvn clean
→ version:0.2.0+dev
✅mvn clean -Prelease
→ version:0.2.0
✅Closes #11196
Pull Request opened by Augment Code with guidance from the PR author