2009/5/10 Stevo Slavić <[email protected]> > "Just because that's the way things are doesn't mean that's how they should > be.", said a character in the movie "Australia". >
I dig that. > > In this particular scenario, local test scoped dependency vs compile scope > transitive dependency, it's my opinion that current strategy is wrong. > Local > test scoped dependencies shouldn't by default override compile scoped > transitive dependencies. If one wanted to exclude transitive compile scoped > dependency and have it available only in test scope, it would be more > natural (for me at least) to require user to specify appropriate excludes > section on a dependency that brought transitive dependency with it. Again, > just in this particular case, requiring user to explicitly specify excludes > section would more clearly state/document the intention, while currently > build tool silently makes a wrong decision (maybe there are times this > decision is correct, but IMO it correct in far less cases than it is > wrong). > At face value the logic seems to make sense, but I haven't thought through all the ramifications. I thought Mark Hobson mentioned some cases where the opposite was desired. At this point your best bet is to prepare a proposal on http://docs.codehaus.org/display/MAVENUSER/User+Proposals with an associated Jira and then start building some consensus around the changes. Work in this area for 3.x is nearing so now's a good time to create the proposal. > > Regards, > Stevo. > > 2009/5/10 Brian Fox <[email protected]> > > > By local I mean the pom currently being built. Stuff defined here always > > overrides dependencies and transitive dependencies. > > > > On Sun, May 10, 2009 at 5:34 AM, Stevo Slavić <[email protected]> wrote: > > > > > Is there any reason why would local win in this particular case? > > > > > > Regards, > > > Stevo. > > > > > > On Sun, May 10, 2009 at 5:26 AM, Brian Fox <[email protected]> wrote: > > > > > > > On Fri, May 8, 2009 at 11:17 AM, Todd Thiessen <[email protected]> > > > > wrote: > > > > > > > > > Override the dependency defined in the POM, as Steve outline in his > > > > > earlier response. Let me quote his explanation for ease of > reference: > > > > > > > > > > "E.g. if project P has test scoped dependency to a LIB1, and > compile > > > > > scoped dependency to LIB2, while LIB2 has compile scope dependency > to > > > > > LIB1, currently project P's war will wrongly end up without LIB1 > > > > > included. In P one expects LIB1 to be available for testing, but > that > > > > > shouldn't affect availability of LIB1 as compile scoped transitive > > > > > dependency, it should be the other way round, in this case scope of > > > > > declared test scoped dependency should be broadened." > > > > > > > > > > I used the term "override" to descibe the situation when project P > > > > > should have LIB1 defined as a compile dependency, when the POM > > actually > > > > > defines it as test. But it should should only override for test > > > > > dependencies, not for provided or runtime. > > > > > > > > > > > > > The local pom always wins. Placing additional semantics on how things > > > merge > > > > is troublesome. I'm sure we can think of scenarios where widening is > > not > > > > the > > > > right thing to do. In either case you must have the ability to > resolve > > > this > > > > yourself if it doesn't do the right thing...and the way to do that is > > to > > > > put > > > > what you want in the local pom. > > > > > > > > > > > > > > > > > > As for your "lost me" comment I am not sure what you would like > > > > > explained. Scope basically has multiple meanings. Compile/test are > > > both > > > > > related to requiring a dependency for compilation; runtime/provided > > are > > > > > both related to requiring a dependency only at runtime. These > > multiple > > > > > meanings are not suited to a single variable. > > > > > > > > > > > > > Are there many cases where you want something for compilation that > > isn't > > > > needed at runtime? I don't see them as being separate. > > > > > > > > > > > > > > > > > > --- > > > > > Todd Thiessen > > > > > > > > > > > > > > > > > > > >
