PPazderski opened a new pull request #372:
URL: https://github.com/apache/maven/pull/372


   I came here because of a project where some maven plugins are not executed 
without any warning or error. Debugging the issue brought me to the 
implementation of the `key` field in `Plugin.java`. It constructs the key 
_once_ on first use from the plugins groupId and artifactId. The key is not 
updated when either of this values changes.
   
   It is not easy for me to say where exactly this construct start to fail, but 
take a look on the following screenshot. At one point 
`ManagementModelMerger.mergePluginContainerPlugins` tries to enhance the child 
pom plugin instance with the version information from the parents 
pluginManagement. But it fails to match both plugin instances. Both plugins 
have the same (interpolated) groupId and artifactId but different keys. 
Obviously for one instance `getKey()` was called before the groupId was 
interpolated but not for the other, resulting in different keys for the same 
plugin.
   
   
![mvn-debug](https://user-images.githubusercontent.com/13628240/92512300-e2fe4500-f20e-11ea-8c65-8dd06b0324ac.png)
   
   My suggested fix is to basically follow the TODO comment found on `key`. 
Reset the `key` if groupId or artifactId changes. Since the key calculation is 
so simple I actually see no reason to cache it at all.
   Furthermore, while writing this description, I noticed that the 
implementation of `ReportPlugin` is very similar (looks like it was copy&pasted 
at one point) and it already does what I propose for this pull request.
   
   PS: an additional note and warning if you want to debug the current code. 
All debuggers I know tend to call the `toString` method when inspecting object 
instances. In case of `Plugin` this also triggers the _one time calculation_ of 
`key`. I.e. inspecting the `Plugin` object in debugger can change the instance 
state and as result the issue does not appear anymore or at a different place 
as without debugging.


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

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


Reply via email to