Skip to content

Conversation

@gnodet
Copy link
Contributor

@gnodet gnodet commented Nov 4, 2025

Description

Fixes #11384

When a POM contains ${project.url} in the <url> field and also defines a property named project.url, Maven was incorrectly attempting to resolve the expression via model reflection first, which would return the same ${project.url} value, causing a recursive variable reference error.

This pattern is used by projects like slack-sdk-parent.

Solution

This fix changes the interpolation resolution order to check model properties before prefixed model reflection. This allows properties like project.url to be resolved from the <properties> section before attempting to use reflection on the model object.

New Resolution Order

  1. basedir
  2. build.timestamp
  3. user properties
  4. model properties (moved up from position 5)
  5. prefixed model reflection (moved down from position 3)
  6. system properties
  7. environment variables
  8. unprefixed model reflection

Rationale

This change is consistent with the approach used for MNG-8469, which established that explicit property definitions should take precedence over model field reflection.

Testing

  • Added unit test: DefaultModelInterpolatorTest.testProjectUrlPropertyDoesNotCauseRecursion()
  • Added integration test: MavenITgh11384RecursiveVariableReferenceTest
  • All existing tests pass (448 tests in maven-impl module)

Pull Request opened by Augment Code with guidance from the PR author

… recursion

When a POM contains ${project.url} in the <url> field and also defines
a property named 'project.url', Maven was incorrectly attempting to
resolve the expression via model reflection first, which would return
the same ${project.url} value, causing a recursive variable reference
error.

This fix changes the interpolation resolution order to check model
properties before prefixed model reflection. This allows properties
like 'project.url' to be resolved from the <properties> section before
attempting to use reflection on the model object.

The new resolution order is:
1. basedir
2. build.timestamp
3. user properties
4. model properties (moved up from position 5)
5. prefixed model reflection (moved down from position 3)
6. system properties
7. environment variables
8. unprefixed model reflection

This change is consistent with the approach used for MNG-8469, which
established that explicit property definitions should take precedence
over model field reflection.

Fixes apache#11384
Remove incorrect constructor with version parameter. AbstractMavenIntegrationTestCase
uses a no-argument constructor and version constraints are handled differently in
the new test framework.
@gnodet gnodet merged commit 727d80f into apache:master Nov 5, 2025
22 checks passed
@github-actions github-actions bot added this to the 4.1.0 milestone Nov 5, 2025
gnodet added a commit to gnodet/maven that referenced this pull request Nov 5, 2025
…1385, fixes apache#11384)

When a POM contains ${project.url} in the <url> field and also defines
a property named 'project.url', Maven was incorrectly attempting to
resolve the expression via model reflection first, which would return
the same ${project.url} value, causing a recursive variable reference
error.

This fix changes the interpolation resolution order to check model
properties before prefixed model reflection. This allows properties
like 'project.url' to be resolved from the <properties> section before
attempting to use reflection on the model object.

The new resolution order is:
1. basedir
2. build.timestamp
3. user properties
4. model properties (moved up from position 5)
5. prefixed model reflection (moved down from position 3)
6. system properties
7. environment variables
8. unprefixed model reflection

This change is consistent with the approach used for MNG-8469, which
established that explicit property definitions should take precedence
over model field reflection.

Fixes apache#11384

(cherry picked from commit 727d80f)
@gnodet
Copy link
Contributor Author

gnodet commented Nov 5, 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 Nov 5, 2025
…sion (#11385, fixes #11384) (#11390)

When a POM contains ${project.url} in the <url> field and also defines
a property named 'project.url', Maven was incorrectly attempting to
resolve the expression via model reflection first, which would return
the same ${project.url} value, causing a recursive variable reference
error.

This fix changes the interpolation resolution order to check model
properties before prefixed model reflection. This allows properties
like 'project.url' to be resolved from the <properties> section before
attempting to use reflection on the model object.

The new resolution order is:
1. basedir
2. build.timestamp
3. user properties
4. model properties (moved up from position 5)
5. prefixed model reflection (moved down from position 3)
6. system properties
7. environment variables
8. unprefixed model reflection

This change is consistent with the approach used for MNG-8469, which
established that explicit property definitions should take precedence
over model field reflection.

Fixes #11384

(cherry picked from commit 727d80f)
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.

[REGRESSION] Cannot load com.slack.api:slack-sdk-parent

2 participants