In my hurry to get my ideas written and posted, I realize that I
missed a few things.

First, I found that <inclusions> was suggested here:
http://jira.codehaus.org/browse/MNG-702 but closed to use optional
scope instead: http://jira.codehaus.org/browse/MNG-947

Whereas, of course, I'm suggesting doing both.

But what I really missed was a technical issue: if you are specifying
that you want to include a "optional" scope dependency, at what scope
does it get used in your project?

Either optional becomes a separate flag instead of a scope.  Or within
the <inclusion> tag you also specify the <scope>.  The only problem
with the latter options it that it gets rid of the symmetry between
<inclusion> and <exclusion>.  But it still makes sense to me.

Not sure on etiquette/proper tracking here: should I put a suggestion
of using <inclusions> (Including scope) as a commont on the MNG-947
issue, or just wait and see on discussion on the mailing list and a)
do it later, b) let a developer who likes the idea put it on there...

-Stephen Duncan Jr

On 9/21/05, Stephen Duncan <[EMAIL PROTECTED]> wrote:
> My use case is using the springframework.  First, note that all
> dependencies that I could find in that project are not defined, and
> are therefore compile scope.
>
> There's several levels of problems here involving optional
> dependencies that have turned transitive dependencies into a
> nightmare.
>
> Say I depend on spring-hibernate.  This causes me to depend on both
> hibernate2 and hibernate3.  It also causes me to depend on spring-orm
> (rightfully).  However, that then causes me to depend on
> spring-ibatis, etc. for other orm implementations.
>
> Possible solutions:
>
> 1) Manually specify exclusions on everything but optional jar that I want.
> 2) Allow me to use an option to "turn off" transitive dependencies on
> that jar, and explicitly depend on the optional jars I need (such as
> hibernate2 in example above).
> 3) Create "optional" scope.  Rely on repository POM to set this
> properly.  Then explicitly depend on the optional jar.
> 4) Create "optional" scope.  Rely on repository POM to set this
> proeprly.  Add "inclusions" for optionally-scoped jars that mirrors
> exclusions for currently passed along jars.
>
> Pros:
>
> 1) Works reliably today.
> 2) Can work with a simple option added, without reliance on correct
> POM in repository for the dependency.
> 3) Just requires Maven developers to add another scope.
> 4) Seems like it provides the most accurate model and description of
> dependencies. Makes sense, seems clean, etc.
>
> Cons:
>
> 1) Verbose.  When upgrading to a new version of a dependency that adds
> additional optional dependencies, have to update the exclusions.
> 2) Explicitly depending on transitive dependencies, including ones
> that are never optional.
> 3) Explicitly depending on transitive dependencies.  Depends on proper
> POM in repo.
> 4) Most work for you wonderful developers. :)  Depends on proper POM in repo.
>
> Hope this was helpful.  At the moment my preference would be to have
> option 2 working today (well, not literally...) (since it will take
> some time for the repository POM's to be accurate), with 4) available
> as the preferred long term method.  I've only been using Maven 2 for a
> day now, but it seems like implementing something here will make
> transitive dependencies a lot less painful.  Please let me know if I
> missed something and some of what I want is available today...
>
> -Stephen Duncan Jr
>
> On 9/19/05, Brett Porter <[EMAIL PROTECTED]> wrote:
> > Actually, I'd have said "optional" should be equivalent to "compile" but
> > not passed on.
> >
> > While they might be significantly different in behaviour, I think that
> > the naming makes it clearer about its use: optional is things used in
> > some contexts but is optional and hence not passed on, while provided is
> > something required, but you are expected to provide in your environment.
> > The fact that provided is not passed on is not something your project
> > should need to know about (like test dependencies, but different to
> > optional ones that you would want to be aware of - they are sort of
> > passed on but unused).
> >
> > - Brett
> >
> > Allison, Bob wrote:
> >
> > >As far as the end user would see, what is the difference between
> > >scope=optional and scope=provided?  It sounds like both scopes do the
> > >same thing: use the dependency in the project's compile and test phases
> > >and prevent the dependency from being passed transitively.  How would a
> > >developer know which scope to use, other than some verbiage in a
> > >(probably unread) README somewhere?
> > >
> > >-----Original Message-----
> > >From: Brett Porter [mailto:[EMAIL PROTECTED]
> > >Sent: Sunday, September 18, 2005 20:27
> > >To: Maven Developers List
> > >Subject: Re: optional scope for dependencies
> > >
> > >
> > >Kenney Westerhof wrote:
> > >
> > >
> > >
> > >>scope=provided currently does not do this (but I like it to :))
> > >>
> > >>
> > >>
> > >>
> > >>
> > >I thought that was the point - provided doesn't pass along the
> > >dependency, hence can be abused as an optional scope. I'm porposing we
> > >actually have an optional scope that does that. This would effectively
> > >be the same as removing them from the repository POM, though allows us
> > >to warn on it at least, and perhaps factor them into the version
> > >resolution if the dependency is present elsewhere in the tree.
> > >
> > >BTW, I've responded to that email - we should discuss that further
> > >there.
> > >
> > >
> > >
> > >>Well, the excludes mechanism can deal with this.
> > >>
> > >>
> > >>
> > >>
> > >Yes, but that pushes the work to the client, which we are hearing
> > >regular complaints about. It's very verbose.
> > >
> > >
> > >
> > >>I believe there was an idea about specifying api's as dependencies
> > >>and a default implementation for that. If a nearer project specifies
> > >>another implementation, that should be used. Although I don't know
> > >>how this should (and can?) be implemented. For instance, a war
> > >>project can be considered final, but then you could also package
> > >>it into an ear, which might override the implementation specified
> > >>in the war's pom.
> > >>
> > >>
> > >>
> > >>
> > >This is different to this - I'm not sure what you mean.
> > >
> > >
> > >
> > >>Btw, the dependencies brought along with dom4j are needed to use that
> > >>project, right? Unless the project uses that project with dom4j
> > >>
> > >>
> > >specifies
> > >
> > >
> > >>those dependencies, it'll break at runtime. Isn't it the job of the
> > >>'nearest' conflict resolution to override versions brought in by
> > >>dependencies? But i guess this is not a version issue, but an
> > >>'implementation provider' issue?
> > >>
> > >>
> > >>
> > >>
> > >Again, not sure what you mean about implementation provider in relation
> > >to this.
> > >
> > >
> > >
> > >>Could you elaborate more on the exact problem? :)
> > >>
> > >>
> > >>
> > >>
> > >Yeah, probably didn't go through it enough as I thought it was well
> > >known.
> > >
> > >dom4j introduces a bunch of dependencies it needs to compile, but you
> > >most likely aren't using because they are optional. You are only using
> > >them if you use the piece of dom4j code that uses them. This is the same
> > >as velocity having a JDBC dependency for its JDBC resource loader that a
> > >lot of people don't use.
> > >
> > >The best solution is for dom4j to split up into a bunch of libraries
> > >that have smaller sets of individual dependencies, and you only depend
> > >on the pieces you use. As much as we can encourage that we can't enforce
> > >it. Letting them designate some dependencies as optional would mean that
> > >those are only used by specific functions not essential to the operation
> > >of the library, and Maven would skip them in the transitive dependency
> > >calculations.
> > >
> > >- Brett
> > >
> > >
> > >
> > >---------------------------------------------------------------------
> > >To unsubscribe, e-mail: [EMAIL PROTECTED]
> > >For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > >---------------------------------------------------------------------
> > >To unsubscribe, e-mail: [EMAIL PROTECTED]
> > >For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
> --
> Stephen Duncan Jr
> www.stephenduncanjr.com
>


--
Stephen Duncan Jr
www.stephenduncanjr.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to