On 11 April 2014 14:40, Chris Graham <chrisgw...@gmail.com> wrote:

>
>
> Sent from my iPhone
>
> On 11/04/2014, at 9:23 AM, Barrie Treloar <baerr...@gmail.com> wrote:
>
> > On 10 April 2014 23:37, Lennart Jörelid <lennart.jore...@gmail.com>
> wrote:
> >
> >> So ... the consequence of your approach would be that POMs throughout a
> >> maven reactor would have to repeat a dependency declaration if the
> classes
> >> in your maven project "directly" import a type. This - to me - seems not
> >> only complex to resolve in a big reactor, but quite user-unfriendly as
> >> well. An example shows this, I think:
> >>
> >
> > This is the *recommended* best practice.
> >
> > If you use something directly, then you should be explicit about that
> > dependency.
>
> If I've followed this thread and fully understood it, the proposal is to
> force the declaration of a dependency in the current Pom, even if they are
> declared as dependencies of your declared dependency, ie transitive
> dependencies.
>
>
This thread is about making the classpath immutable to plugins.
As per Jason's original email if a plugin wants to change the classpath
they should declare it in the plugin pom, or document that users should
declare it in their pom.



> Does this not effectively disable the use of transitive dependencies?
>
>
Additionally this thread had stuff included around Mark Derricutt's email
that suggested Maven change its behaviour so that compile time dependencies
are not transitive.
Which is what the recommended best practice is to do anyway.

Runtime would still be transitive.

>
> I find transitive dependencies one of the most useful, powerful features
> of Maven.
>
> Without them, it takes me back to the (horrid) Ant days of manually having
> walk the dependency tree.
>
> And what of consolidation/library poms, where one Pom lists 100's of other
> jars needed? The WebSphere Process Server one (172 jars!) comes to mind.
>

Consolidation or library poms would mostly contain runtime dependencies and
not be a problem.

For compile time dependencies the two ways to do this are via inheritance
or includes.
Inheritance (i.e. parent poms) works because the dependency management
defines what versions to use, and in the child you select what you actually
want.
If there are too many things to define in the child then maybe the include
way would be better.
I can't remember whether include is vaporware though...

http://books.sonatype.com/mvnref-book/reference/pom-relationships-sect-pom-best-practice.htmlsays
"There's a certain point defined more by style and experience where you
decide that minimal duplication of configuration is a small price to pay
for allowing projects [...] to remain completely independent. Designing a
huge set of thirty plus projects which all inherit five levels of POM
configuration isn't always the best idea."

Reply via email to