DavidTavoularis opened a new issue, #11767:
URL: https://github.com/apache/maven/issues/11767

   ### Affected version
   
   4.0.0-rc5
   
   ### Bug description
   
   Note that I asked Claude Code to help with the analysis and the fix.
   
   ```
   $ mvn clean install
   [...]
   [INFO] --- install:3.1.3:install (default-install) @ xxx ---
   [INFO] Artifact yyy is present in the local repository, but cached from a 
remote repository ID that is unavailable in current build context, verifying 
that is downloadable from [central (https://repo.maven.apache.org/maven2, 
default, releases)]
   [INFO] 
--------------------------------------------------------------------------------------------------------------------------
   [INFO] BUILD FAILURE
   [INFO] 
--------------------------------------------------------------------------------------------------------------------------
   [...]
   [ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-install-plugin:3.1.3:install (default-install) 
on project xxx: Execution default-install of goal 
org.apache.maven.plugins:maven-install-plugin:3.1.3:install failed: 
org.apache.maven.api.services.ModelBuilderException: 12 problems were 
encountered while building the effective model for xxx
   [ERROR]     - [ERROR] Non-resolvable import POM: The following artifacts 
could not be resolved: yyy (present, but unavailable): yyy was not found in 
https://repo.maven.apache.org/maven2 during a previous attempt. This failure 
was cached in the local repository and resolution is not reattempted until the 
update interval of central has elapsed or updates are forced (remote 
repositories: central (https://repo.maven.apache.org/maven2, default, 
releases)) @ line 22, column 7
   [...]
   ```
   In DefaultProjectBuilder (normal build), the ModelBuilderRequest is 
constructed with:
     - repositories(...) — passes remote repositories (including those from 
settings.xml profiles)
     - profiles(...) — passes profiles (from settings.xml)
     - activeProfileIds(...) — passes active profile IDs
   
   ```
   In DefaultConsumerPomBuilder.buildModel() (used during install/deploy), none 
of these are set:
     // Line 225-238 - DefaultConsumerPomBuilder.java
     private ModelBuilderResult buildModel(RepositorySystemSession session, 
ModelSource src) {
         InternalSession iSession = InternalSession.from(session);
         ModelBuilderRequest.ModelBuilderRequestBuilder request = 
ModelBuilderRequest.builder();
         request.requestType(ModelBuilderRequest.RequestType.BUILD_CONSUMER);
         request.session(iSession);
         request.source(src);
         request.locationTracking(false);
         request.systemProperties(session.getSystemProperties());
         request.userProperties(session.getUserProperties());
         
request.lifecycleBindingsInjector(lifecycleBindingsInjector::injectLifecycleBindings);
         // *** MISSING: request.repositories(...) ***
         // *** MISSING: request.profiles(...) ***
         // *** MISSING: request.activeProfileIds(...) ***
         ...
     }
   ```
   The buildModel method at DefaultConsumerPomBuilder.java:225 never calls 
request.repositories(), request.profiles(), or request.activeProfileIds(). So 
when the model builder resolves BOM imports, it only has Maven Central — the 
private  repository from your settings.xml profile is never injected.
   
   The bug was actually in two places:
   1. DefaultConsumerPomBuilder.buildModel() - wasn't passing 
repositories/profiles to the ModelBuilderRequest at all
   2. DefaultModelBuilder.derive() - even when repositories were passed in the 
request, the derive() method ignored them and reused the parent session's 
repositories                                               
   
   Claude Code updated the 2 following unitary tests (which failed without the 
2 fixes):
   Test 1: 
ConsumerPomBuilderTest.testConsumerPomPassesProjectRepositoriesToModelBuilder 
(maven-core)
     - Covers the DefaultConsumerPomBuilder.buildModel() fix
     - Verifies that project remote repositories are passed to the 
ModelBuilderRequest when building the consumer POM
     - Uses Mockito spy to capture and assert on the BUILD_CONSUMER request
   
   Test 2: DefaultModelBuilderTest.testDeriveSessionUsesRequestRepositories 
(maven-impl)
     - Covers the DefaultModelBuilder.derive() fix
     - Verifies that when a derived session is created with explicit 
repositories, those repos are used instead of the parent session's
     - Uses reflection (same pattern as existing testMergeRepositories) to 
inspect the derived session's repositories and externalRepositories fields
   
   Claude Code also created an integration test 
MavenITConsumerPomBomFromSettingsRepoTest:
     - End-to-end: install with flattening, BOM from settings.xml profile repo, 
consumer -> POM has resolved versions                                           
                                                                                
                                   
   
   I was also able to confirm that when implementing the same fixes on top of 
4.0-rc5, my "mvn clean install" passed.
   
   I am now preparing a Pull Request.


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to