[ http://jira.codehaus.org/browse/MNG-4761?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=231708#action_231708 ]
Benjamin Bentmann commented on MNG-4761: ---------------------------------------- For future reference, the failing test scenario centeres around the following dirty tree for the plugin depencencies: {noformat} plugin +- override:0.1:compile | \- middle:0.1:compile <-----------\ | \- required:0.1:compile <---\ | +- direct:0.1:runtime (a) | | +- required:0.1:runtime <---/ | | \- middle:0.1:runtime <--------- (b) | \- required:0.1:runtime | \- middle:0.2:runtime <-----------/ {noformat} During resolution of conflict (a), the node {{required:0.1:runtime}} will be disabled in favor of {{required:0.1:compile}}, although the runtime-scope dependency is nearer, i.e. Maven's usual conflict resolution strategy of nearest-wins is violated here. When conflict (b) is resolved, all {{middle:0.1:*}} nodes including their children will be disabled, thereby completely losing {{required:0.1}} on the plugin class path. So while using runtime scope for the project-level plugin dependencies workarounds the problem, the issue remains for ordinary project dependency resolution. I wonder if it got filled already. > Plugin-level dependency scope causes some plugin classpaths to be incorrect > --------------------------------------------------------------------------- > > Key: MNG-4761 > URL: http://jira.codehaus.org/browse/MNG-4761 > Project: Maven 2 & 3 > Issue Type: Bug > Components: Artifacts and Repositories, Plugins and Lifecycle > Affects Versions: 2.2.1, 3.0-beta-1, 3.0-beta-2 > Reporter: John Casey > Assignee: John Casey > Fix For: 2.2.2, 3.0-beta-3 > > Attachments: MNG-4761-mvn3b2.patch, > MNG-4761-mvn3b2.reformatted.patch, obscured-nearer-dep.zip > > > Plugin-level dependencies should use RUNTIME scope at all times. Using any > other scope may alter the weighting given to the subgraph-choice algorithm > used in transitive dependency resolution. > Plugin-level dependencies use compile scope by default. When transitive > resolution takes place, compile scope takes precedence over runtime scope, > causing the transitive dependency sub-graph of the plugin-level dependency to > be activated over those of the plugin itself. > This happens even when the plugin's transitive dep is NEARER to the top level > than the one brought in by that plugin-level dependency itself. > The result is that when a dep that's farther away is chosen over a nearer > one, it can then be disabled by Maven choosing to disable its parent dep (the > one that brought it in) in another part of the transitive resolution process. > This is a very subtle case where Maven is doing the wrong thing. The attached > test case should make it clearer. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira