Skip to content

Conversation

@gnodet
Copy link
Contributor

@gnodet gnodet commented Sep 17, 2025

Summary

  • DefaultModelValidator: allow repository URL interpolation.
  • CompatibilityFixStrategy: avoid altering repository URL expressions.
  • Add IT resources for repo interpolation cases.

@gnodet gnodet force-pushed the feat-repo-interpolation-compat branch from 9bcafc8 to 18a82c6 Compare September 26, 2025 06:29
gnodet added a commit to gnodet/maven that referenced this pull request Oct 6, 2025
This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and improving validation messaging. The changes address
the overly restrictive approach that previously disabled repositories with
any expressions beyond project.basedir and project.rootDirectory.

Key changes:
- DefaultModelBuilder: Add repository URL interpolation during model building
  for repositories, pluginRepositories, profiles, and distributionManagement
- DefaultModelValidator: Replace restrictive expression validation with
  unresolved placeholder detection that fails at resolution time
- CompatibilityFixStrategy: Remove repository disabling logic, replace with
  informational logging for interpolated URLs
- Add comprehensive integration tests for both successful interpolation and
  failure cases with unresolved placeholders

The new approach allows legitimate use cases like ${env.REPO_URL} while still
catching unresolved placeholders when repositories are actually used, providing
better user experience and maintaining Maven's robustness.

Fixes apache#11140
@gnodet gnodet force-pushed the feat-repo-interpolation-compat branch 2 times, most recently from 127929a to d15b581 Compare October 6, 2025 23:39
gnodet added a commit to gnodet/maven that referenced this pull request Oct 6, 2025
This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and improving validation messaging. The changes address
the overly restrictive approach that previously disabled repositories with
any expressions beyond project.basedir and project.rootDirectory.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Add project.basedir.uri and project.rootDirectory.uri expressions for MNG-8465
   - Provides both string and URI formats for basedir and rootDirectory properties

2. DefaultModelValidator: Replace restrictive expression validation with proper flow
   - Remove premature expression validation from model validator
   - Allow expressions to pass through model validation and fail at repository resolution time
   - Repository URL interpolation is now allowed; unresolved placeholders fail during resolution
   - This matches the intended design where MavenValidator in resolver catches uninterpolated expressions

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add comprehensive integration tests for both successful interpolation and
   failure cases with unresolved placeholders:
   - MavenITgh11140RepoInterpolationTest: Tests successful interpolation from env and properties
   - MavenITgh11140RepoDmUnresolvedTest: Tests failure with unresolved placeholders
   - Updated tests to use dependency:resolve and -e flag to capture proper error messages

5. Enhanced test coverage:
   - Update unit test expectations to reflect corrected validation flow
   - Add test case for unsupported expressions
   - Apply code formatting fixes with spotless

The new approach allows legitimate use cases like ${env.REPO_URL} while still
catching unresolved placeholders when repositories are actually used, providing
better user experience and maintaining Maven's robustness.

This resolves the MNG-8465 integration test failure and fixes apache#11140.
@gnodet gnodet force-pushed the feat-repo-interpolation-compat branch 2 times, most recently from cc5bc99 to 829b79f Compare October 6, 2025 23:49
This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and providing early validation of unresolved expressions.
Repository URLs can now use expressions like ${env.REPO_URL} and ${project.basedir.uri}
which are interpolated during model building.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Provide basedir, project.basedir, project.basedir.uri, project.rootDirectory,
     and project.rootDirectory.uri properties for interpolation
   - Enable environment variable and project property interpolation in repository URLs

2. DefaultModelValidator: Validate interpolated repository URLs for unresolved expressions
   - Repository URL expressions are interpolated during model building
   - After interpolation, any remaining ${...} expressions cause validation errors
   - Early failure during model validation provides clear error messages

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add integration tests for repository URL interpolation:
   - Test successful interpolation from environment variables and project properties
   - Test early failure when expressions cannot be resolved during model building

The new approach enables legitimate use cases while providing early, clear error
messages for unresolved expressions during the validate phase rather than later
during repository resolution.
@gnodet gnodet force-pushed the feat-repo-interpolation-compat branch from 829b79f to beacd66 Compare October 7, 2025 00:17
@gnodet gnodet added bug Something isn't working backport-to-4.0.x labels Oct 7, 2025
@gnodet gnodet merged commit 210dbdc into apache:master Oct 7, 2025
54 of 57 checks passed
@github-actions github-actions bot added this to the 4.1.0 milestone Oct 7, 2025
gnodet added a commit to gnodet/maven that referenced this pull request Oct 7, 2025
…1140)

This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and providing early validation of unresolved expressions.
Repository URLs can now use expressions like ${env.REPO_URL} and ${project.basedir.uri}
which are interpolated during model building.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Provide basedir, project.basedir, project.basedir.uri, project.rootDirectory,
     and project.rootDirectory.uri properties for interpolation
   - Enable environment variable and project property interpolation in repository URLs

2. DefaultModelValidator: Validate interpolated repository URLs for unresolved expressions
   - Repository URL expressions are interpolated during model building
   - After interpolation, any remaining ${...} expressions cause validation errors
   - Early failure during model validation provides clear error messages

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add integration tests for repository URL interpolation:
   - Test successful interpolation from environment variables and project properties
   - Test early failure when expressions cannot be resolved during model building

The new approach enables legitimate use cases while providing early, clear error
messages for unresolved expressions during the validate phase rather than later
during repository resolution.

(cherry picked from commit 210dbdc)

# Conflicts:
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
@gnodet
Copy link
Contributor Author

gnodet commented Oct 7, 2025

💚 All backports created successfully

Status Branch Result
maven-4.0.x

Questions ?

Please refer to the Backport tool documentation

gnodet added a commit that referenced this pull request Oct 7, 2025
This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and providing early validation of unresolved expressions.
Repository URLs can now use expressions like ${env.REPO_URL} and ${project.basedir.uri}
which are interpolated during model building.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Provide basedir, project.basedir, project.basedir.uri, project.rootDirectory,
     and project.rootDirectory.uri properties for interpolation
   - Enable environment variable and project property interpolation in repository URLs

2. DefaultModelValidator: Validate interpolated repository URLs for unresolved expressions
   - Repository URL expressions are interpolated during model building
   - After interpolation, any remaining ${...} expressions cause validation errors
   - Early failure during model validation provides clear error messages

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add integration tests for repository URL interpolation:
   - Test successful interpolation from environment variables and project properties
   - Test early failure when expressions cannot be resolved during model building

The new approach enables legitimate use cases while providing early, clear error
messages for unresolved expressions during the validate phase rather than later
during repository resolution.

(cherry picked from commit 210dbdc)

# Conflicts:
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
gnodet added a commit that referenced this pull request Oct 8, 2025
This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and providing early validation of unresolved expressions.
Repository URLs can now use expressions like ${env.REPO_URL} and ${project.basedir.uri}
which are interpolated during model building.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Provide basedir, project.basedir, project.basedir.uri, project.rootDirectory,
     and project.rootDirectory.uri properties for interpolation
   - Enable environment variable and project property interpolation in repository URLs

2. DefaultModelValidator: Validate interpolated repository URLs for unresolved expressions
   - Repository URL expressions are interpolated during model building
   - After interpolation, any remaining ${...} expressions cause validation errors
   - Early failure during model validation provides clear error messages

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add integration tests for repository URL interpolation:
   - Test successful interpolation from environment variables and project properties
   - Test early failure when expressions cannot be resolved during model building

The new approach enables legitimate use cases while providing early, clear error
messages for unresolved expressions during the validate phase rather than later
during repository resolution.

(cherry picked from commit 210dbdc)

# Conflicts:
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
gnodet added a commit that referenced this pull request Oct 8, 2025
…11210)

This commit enables repository URL interpolation in Maven 4 while maintaining
backward compatibility and providing early validation of unresolved expressions.
Repository URLs can now use expressions like ${env.REPO_URL} and ${project.basedir.uri}
which are interpolated during model building.

Key changes:

1. DefaultModelBuilder: Add repository URL interpolation during model building
   - Support for repositories, pluginRepositories, profiles, and distributionManagement
   - Provide basedir, project.basedir, project.basedir.uri, project.rootDirectory,
     and project.rootDirectory.uri properties for interpolation
   - Enable environment variable and project property interpolation in repository URLs

2. DefaultModelValidator: Validate interpolated repository URLs for unresolved expressions
   - Repository URL expressions are interpolated during model building
   - After interpolation, any remaining ${...} expressions cause validation errors
   - Early failure during model validation provides clear error messages

3. CompatibilityFixStrategy: Remove repository disabling logic, replace with
   informational logging for interpolated URLs

4. Add integration tests for repository URL interpolation:
   - Test successful interpolation from environment variables and project properties
   - Test early failure when expressions cannot be resolved during model building

The new approach enables legitimate use cases while providing early, clear error
messages for unresolved expressions during the validate phase rather than later
during repository resolution.

(cherry picked from commit 210dbdc)

# Conflicts:
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelBuilder.java
#	impl/maven-impl/src/main/java/org/apache/maven/impl/model/DefaultModelValidator.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-to-4.0.x bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants