Add integration test for recursive project.url variable reference (GH-11074)#11075
Closed
gnodet wants to merge 5154 commits intomaven-3.9.xfrom
Closed
Add integration test for recursive project.url variable reference (GH-11074)#11075gnodet wants to merge 5154 commits intomaven-3.9.xfrom
gnodet wants to merge 5154 commits intomaven-3.9.xfrom
Conversation
JIRA issue: [MNG-5668](https://issues.apache.org/jira/browse/MNG-5668) When a build step fails, Maven should still execute its corresponding after:* phases to ensure proper cleanup. This fix modifies the BuildPlanExecutor to: - Execute after:* phases when their corresponding before:* phase has been executed - Maintain proper phase ordering during failure handling - Handle cleanup phase failures gracefully without affecting the original error - Preserve concurrent build capabilities This ensures cleanup tasks (like resource cleanup or test environment teardown) are properly executed even when the build fails.
Fixes the existing 'all' phase and introduces a new 'each' phase to better support hierarchical builds and concurrent execution: - 'all': Properly coordinates execution across parent-child project hierarchies - 'each': A new phase that executes for each individual project in isolation Key changes: - Enhanced BuildPlanExecutor to properly handle parent-child relationships in phases - Added new children() pointer type for explicit phase dependencies - Improved phase dependency management to ensure: - Parent's before:all executes before children's phases - Children's after:all executes before parent's after:all - Each project's phases execute in isolation within the 'each' phase - Added comprehensive documentation to BuildPlanExecutor - Added integration test to verify hierarchical phase execution This commit also fixes thread-safety issues in concurrent builds: - Added synchronization to ReactorReader for project operations - Improved thread-safety for project-level clean and install operations - Enhanced build step state management in concurrent scenarios Fixes: MNG-8653
…onfig (#2194) Added support for substituting and in .mvn/jvm.config with the actual project base directory. Changes: - Modified mvn and mvn.cmd scripts to handle the substitution - Added integration test to verify the functionality The test verifies: - Both curly brace and simple syntax variants work - Substitution happens correctly in forked JVM - Feature is available in Maven 4.0+
* minor cleanups
Bumps `asmVersion` from 9.7.1 to 9.8. Updates `org.ow2.asm:asm` from 9.7.1 to 9.8 Updates `org.ow2.asm:asm-commons` from 9.7.1 to 9.8 Updates `org.ow2.asm:asm-util` from 9.7.1 to 9.8 --- updated-dependencies: - dependency-name: org.ow2.asm:asm dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.ow2.asm:asm-commons dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.ow2.asm:asm-util dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Make subproject maven-cli use "outer" Mimir (if used): This locally cuts UT runtime from 10+ sec to 2+ sec. Same thing for maven-executor. The maven-cli redirects user home "lightly" (only invoker req), while maven-executor does same thing (fully redirects) as Maven ITs hence it needs a property file as well to point it at real Mimir Daemon socket.
We do not utilize LAN sharing on CI, caches are "local" only. Also, as can be seen, Jgroups may fail to start on Windoze.
Bumps [net.bytebuddy:byte-buddy](https://github.com/raphw/byte-buddy) from 1.17.4 to 1.17.5. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](raphw/byte-buddy@byte-buddy-1.17.4...byte-buddy-1.17.5) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-version: 1.17.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- https://issues.apache.org/jira/browse/MNG-8668
…ts (#2213) The .mvn/jvm.config file parsing in mvn.cmd needed improvements to properly handle multiple JVM arguments, especially when dealing with comments, quotes and spaces in values. This PR: - Ensures proper parsing of multiple JVM arguments from .mvn/jvm.config - Maintains proper spacing between arguments - Handles both inline and full-line comments correctly - Fixes a bug in the space trimming logic (%%x -> %%i) - Preserves spaces within quoted values The changes are validated by MavenITmng4559MultipleJvmArgsTest which verifies: - Multiple JVM arguments are properly handled - Comments are correctly processed - Arguments with spaces in quotes are preserved - Arguments from multiple lines are properly combined Fixes: https://issues.apache.org/jira/browse/MNG-4559
The only spot where trace was set but not context, all the rest of the spots were checked and are ok. --- https://issues.apache.org/jira/browse/MNG-8669
Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.12 to 0.8.13. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](jacoco/jacoco@v0.8.12...v0.8.13) --- updated-dependencies: - dependency-name: org.jacoco:jacoco-maven-plugin dependency-version: 0.8.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
- Add missing class-level and method-level Javadoc to various classes in api/ subprojects - Add missing type parameter Javadoc to parameterized classes - Fix Javadoc errors by escaping angle brackets in code examples - Fix Javadoc reference errors in TypeRegistry - Remove cross-module references in TypeRegistry Javadoc - Enhance javadoc for Config.Source enum to clarify when properties are evaluated - Add missing package-info.java for org.apache.maven.di.tool package - Enhance existing package-info.java files with more detailed documentation - Ensure consistent Javadoc style across the API
The legacy prompter should only use the Prompter interface, not the DefaultPrompter implementaiton, so that the Maven daemon can override how prompting is implemented. See apache/maven-mvnd#1303
Source hint should tell what it is: GAV? GATC? Anything else? Especially the GAV and GATC are prone to be mixed by humans when trying to decipher error message. --- https://issues.apache.org/jira/browse/MNG-8676
* [MNG-8637] Pull out Standalone API from UTs This commit moves the Standalone API implementation from the test directory to the main source directory, making it available for reuse outside of tests. The Standalone API provides a way to run Maven API in a standalone mode (without the full Maven environment), primarily for testing and specialized execution scenarios. This is now the proper way to utilize Maven 4 in MIMA-like scenarios. Key changes: - Moved ApiRunner and RepositorySystemSupplier from test to main source - Added UnsupportedInStandaloneModeException for operations not supported in standalone mode - Added package-info.java with documentation for the standalone package * [MNG-8637] Fix Javadoc HTML structure in package-info.java * Move back transports to test scope
* Remove methods that duplicate superclass methods
* A few grammar fixes in javadoc
To not go blindly for file.
…11013) Bumps [eu.maveniverse.maven.plugins:bom-builder3](https://github.com/maveniverse/bom-builder-maven-plugin) from 1.1.1 to 1.2.0. - [Release notes](https://github.com/maveniverse/bom-builder-maven-plugin/releases) - [Commits](maveniverse/bom-builder-maven-plugin@release-1.1.1...release-1.2.0) --- updated-dependencies: - dependency-name: eu.maveniverse.maven.plugins:bom-builder3 dependency-version: 1.2.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…riptorReader (#10938) The ArtifactDescriptorReaderDelegate was marked as 'work in progress' and could be 'changed or removed without notice'. This change consolidates its functionality directly into DefaultArtifactDescriptorReader by: - Moving all delegate methods as private methods in DefaultArtifactDescriptorReader - Removing the unused extension mechanism via session config properties - Simplifying the codebase by removing unnecessary abstraction - Maintaining identical functionality for normal usage The compat module retains the original delegate pattern for backward compatibility since it's already deprecated and marked for removal in 4.0.0. If a proper extension point is needed in the future, it can be designed more explicitly with proper interfaces and documentation. Also fixes maven.config to be compatible with Maven 3.6.x by removing comment that causes parsing errors in older Maven versions.
Fixes #10995 The SmartProjectComparator.getProjectWeight() method was using ConcurrentHashMap.computeIfAbsent() in a recursive context, which could lead to IllegalStateException: Recursive update when calculating project weights in complex dependency graphs or concurrent scenarios. Changes: - Replace computeIfAbsent() with explicit get() + putIfAbsent() pattern - Eliminate recursive calls to computeIfAbsent() that violate ConcurrentHashMap's internal constraints - Maintain thread safety using putIfAbsent() for concurrent access - Add comprehensive test case to verify the fix under concurrent load The fix preserves all existing functionality while eliminating the recursive update exception that could occur during parallel builds of large multi-module projects.
Bumps `jlineVersion` from 3.30.4 to 3.30.5. Updates `org.jline:jline-reader` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-style` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-builtins` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-console` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-console-ui` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-terminal` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-terminal-ffm` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-terminal-jni` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jline-native` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) Updates `org.jline:jansi-core` from 3.30.4 to 3.30.5 - [Release notes](https://github.com/jline/jline3/releases) - [Commits](jline/jline3@jline-3.30.4...3.30.5) --- updated-dependencies: - dependency-name: org.jline:jline-reader dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-style dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-builtins dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-console dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-console-ui dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-terminal dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-terminal-ffm dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-terminal-jni dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.jline:jline-native dependency-version: 3.30.5 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.jline:jansi-core dependency-version: 3.30.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* [MNG-5102] Add support for POM mixins This commit implements Maven Mixins, a powerful mechanism for sharing common POM configuration across multiple projects without the limitations of traditional inheritance. Key features: - Compose project configuration from multiple sources - Overcome single inheritance limitation - Reduce configuration duplication - Enable better separation of concerns Changes include: - New model version 4.2.0 support for mixins - Mixin and mixinManagement elements in POM model - Mixin resolution and composition logic - Integration with existing inheritance system - Comprehensive documentation and examples - Maven 3 compatibility fixes for maven.config The implementation allows projects to declare mixins that are resolved and merged in order, with later mixins overriding earlier ones, and the current POM having final precedence.
Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.3 to 3.27.4. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](assertj/assertj@assertj-build-3.27.3...assertj-build-3.27.4) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-version: 3.27.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.apache.maven:maven-archiver](https://github.com/apache/maven-archiver) from 3.6.3 to 3.6.4. - [Release notes](https://github.com/apache/maven-archiver/releases) - [Commits](apache/maven-archiver@maven-archiver-3.6.3...maven-archiver-3.6.4) --- updated-dependencies: - dependency-name: org.apache.maven:maven-archiver dependency-version: 3.6.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
As build takes a long time when a new commit is pushed, we should cancel previous build and build only the last one.
Bumps [net.bytebuddy:byte-buddy](https://github.com/raphw/byte-buddy) from 1.17.6 to 1.17.7. - [Release notes](https://github.com/raphw/byte-buddy/releases) - [Changelog](https://github.com/raphw/byte-buddy/blob/master/release-notes.md) - [Commits](raphw/byte-buddy@byte-buddy-1.17.6...byte-buddy-1.17.7) --- updated-dependencies: - dependency-name: net.bytebuddy:byte-buddy dependency-version: 1.17.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps `mockitoVersion` from 5.18.0 to 5.19.0. Updates `org.mockito:mockito-bom` from 5.18.0 to 5.19.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](mockito/mockito@v5.18.0...v5.19.0) Updates `org.mockito:mockito-junit-jupiter` from 5.18.0 to 5.19.0 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](mockito/mockito@v5.18.0...v5.19.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-bom dependency-version: 5.19.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.mockito:mockito-junit-jupiter dependency-version: 5.19.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [org.codehaus.plexus:plexus-testing](https://github.com/codehaus-plexus/plexus-testing) from 1.5.0 to 1.6.0. - [Release notes](https://github.com/codehaus-plexus/plexus-testing/releases) - [Commits](codehaus-plexus/plexus-testing@plexus-testing-1.5.0...plexus-testing-1.6.0) --- updated-dependencies: - dependency-name: org.codehaus.plexus:plexus-testing dependency-version: 1.6.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.7.1 to 5.0.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](actions/setup-java@c5195ef...dded088) --- updated-dependencies: - dependency-name: actions/setup-java dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4.3.0 to 5.0.0. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](actions/download-artifact@d3f86a1...634f93c) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@5a3ec84...0400d5f) --- updated-dependencies: - dependency-name: actions/cache dependency-version: 4.2.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@11bd719...08c6903) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [commons-cli:commons-cli](https://github.com/apache/commons-cli) from 1.9.0 to 1.10.0. - [Changelog](https://github.com/apache/commons-cli/blob/master/RELEASE-NOTES.txt) - [Commits](apache/commons-cli@rel/commons-cli-1.9.0...rel/commons-cli-1.10.0) --- updated-dependencies: - dependency-name: commons-cli:commons-cli dependency-version: 1.10.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…11065) Bumps [eu.maveniverse.maven.plugins:bom-builder3](https://github.com/maveniverse/bom-builder-maven-plugin) from 1.2.0 to 1.2.1. - [Release notes](https://github.com/maveniverse/bom-builder-maven-plugin/releases) - [Commits](maveniverse/bom-builder-maven-plugin@release-1.2.0...release-1.2.1) --- updated-dependencies: - dependency-name: eu.maveniverse.maven.plugins:bom-builder3 dependency-version: 1.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Simplify prefix resolution and drop use of BuildPluginManager (as descriptor will be re-resolved again later) and focus only on prefix to GA resolution, using a map of rules: * collect POM enlisted plugin groupId:artifactId pairs that come from non-settings-enlisted groupIDs (and allow only enlisted artifactIDs) * add settings enlisted plugin groupIds (keep their order) but "allow any" artifactId Using this map, figure out plugin GA from prefix using Maven metadata only. Fixes #11067
…-11074) This integration test demonstrates the behavior difference between Maven 3 and Maven 4 when handling recursive variable references in project.url. - Direct recursive reference: Maven 4 fails with 'recursive variable reference: project.url' - Dependency recursive reference: Maven 4 shows warning but continues build Relates to: #11074
Both Maven 3 and 4 correctly fail when building projects with recursive variable references. The key difference is in dependency consumption: - Maven 4: Warns about invalid dependency POMs with recursive references - Maven 3: May silently ignore the issue in dependency POMs Updated test expectations and documentation to reflect this correct understanding.
b34c8de to
e142e32
Compare
Member
|
@gnodet do you need a branch as PR is closed? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
This PR adds an integration test for GH-11074 that demonstrates the behavior difference between Maven 3 and Maven 4 when handling recursive variable references in
project.url.Changes
MavenITgh11074RecursiveProjectUrlTest.javaTest Scenarios
1. Direct Recursive Reference (Local Project Build)
gh-11074-recursive-project-url/<url>${project.url}</url>2. Dependency Recursive Reference (Pre-built Artifact Consumption)
gh-11074-recursive-project-url-dependency/project.urlKey Insight
The real difference between Maven 3 and 4 is not in building projects with recursive references (both fail), but in how they handle pre-built artifacts with recursive references when consumed as dependencies:
Verification
Both test scenarios have been manually verified:
Real-world Impact
This test reproduces the behavior observed with dependencies like
com.slack.api:slack-api-client:jar:1.45.4which contain recursive references in their POMs. These artifacts were published to repositories despite having recursive references, and Maven 4's improved validation now detects and warns about these issues during dependency resolution.Related