gnodet commented on PR #281:
URL: 
https://github.com/apache/maven-source-plugin/pull/281#issuecomment-4161305651

   ## Investigation: Resource order inversion in Maven 4 compatibility layer
   
   ### The problem
   
   When a Maven 3 plugin (such as `maven-remote-resources-plugin`) dynamically 
adds a resource via `project.getResources().add(resource)` or 
`project.addResource(resource)`, the resource is added to the internal 
`LinkedHashSet<SourceRoot> sources`, but **not** to the model's 
`Build.resources`.
   
   ### Why this causes the order inversion
   
   The `maven-source-plugin` (3.x) in its `createArchiver()` method uses 
`project.getBuild().getResources()` (the model) to find the 
`maven-shared-archive-resources` directory and add META-INF files **first** in 
the JAR. In Maven 4, `getBuild().getResources()` doesn't see dynamically added 
resources → META-INF files are not added first → they end up at the end.
   
   ### In Maven 3
   
   `project.getResources()` and `project.getBuild().getResources()` return the 
**same** mutable list. Both see dynamically added resources.
   
   ### In Maven 4
   
   `project.getResources()` returns a virtual list based on `sources`, while 
`project.getBuild().getResources()` returns a WrapperList based on the model. 
They are **disconnected**.
   
   ### Fix
   
   A change in `MavenProject.addResource()` (impl/maven-core): also propagate 
the addition to the model's Build to maintain consistency:
   
   ```java
   private void addResource(ProjectScope scope, Resource resource) {
       addSourceRoot(new DefaultSourceRoot(getBaseDirectory(), scope, 
resource.getDelegate()));
       // Also update the model's Build to maintain compatibility
       if (scope == ProjectScope.MAIN) {
           getModelBuild().addResource(resource);
       } else {
           getModelBuild().addTestResource(resource);
       }
   }
   ```
   
   This ensures that resources added dynamically by plugins are visible through 
both access paths (`project.getResources()` and 
`project.getBuild().getResources()`), matching Maven 3 behavior.
   
   Draft PR: https://github.com/apache/maven/pull/11868
   
   _Claude Code on behalf of Guillaume Nodet_


-- 
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