[prev in list] [next in list] [prev in thread] [next in thread] 

List:       maven-user
Subject:    Re: Grandparent classes not found at compile time
From:       Trinition <trin+nabble.com () trinition ! org>
Date:       2009-03-30 23:33:49
Message-ID: 22795415.post () talk ! nabble ! com
[Download RAW message or body]


My point is about transitive support for provided dependencies.  The middle
artifact here does declare a dependency to the third-party jar.  But its
declared as *provided*, not *compile*.

Now I understand the intent of provided.  It's to say "I expect this to be
provided in the runtime environment, so don't package it into anything --
but since you're compiling outside of said runtime environment, include it
for compile purposes."  Is this correct?

On the other hand, a *compile* dependency is something you need tom compile
against and include in any subsequent packaging, true?

So then a project's own dependencies...

*compile*
  Used at compile: TRUE
  Used in package: TRUE
*provided*
  Used at compile: TRUE
  Used in package: FALSE

So compiling against a direct "provided" dependency works fine.  But if I
put a layer in there, it breaks down according to Maven's own rules:

transitive *compile*
  Used at compile: TRUE
  Used in package: TRUE
transitive *provided*
  Used at compile: FALSE
  Used in package: FALSE

A transitive *provided* dependency is not included at runtime.  But I'm
still in a compile phase, trying to compile against the same jars all of my
dependencies had available to them when they compiled.  I can certainly see
times when you wouldn't want this, but in the case of a class hierarchy, you
must  have them.

So my option is to go into the middle artifact's pom and change the
dependency to the third party from *provided* to *compile* or explicitly
include the third party *provided* jar directly form my application's pom
(which mean's I'm duplicating information already in the middle component's
pom).  For the time being, I'm doing the latter, but it doesn't feel right.

I feel like there's a certain degree of freedom missing here where I want
something to NOT be packaged because it'll be included but still make it a
compile time dependency since I'm not in the container at runtime.  I have
that for direct dependencies but not transitive dependencies.

Regards,
Brian.


Wayne Fay wrote:
> 
> > But if I must do manual dependency analysis every time I update a third
> > party jar -- just in case it now incurs a new dependency for me -- then
> > what
> > value are transitive dependencies in Maven at all?
> 
> You are expected to know what Jars your project (specifically) depends
> on. I've followed this thread and still don't understand why you don't
> know this.
> 
> If artifacts you depend on have dependencies themselves (which is what
> should happen when one class extends another), they should be declared
> in the pom files of those projects. If those artifacts do not properly
> declare the scope of all of their dependencies, such that a needed
> class is not being found during compilation/testing/runtime, then you
> need to talk to the owner of the "bad" artifact. If those artifacts do
> not have pom files at all (you're using mvn install:install-file or
> deploy:deploy-file on them), then that is another issue.
> 
> Maven's (transitive) dependency management works extremely well for a
> lot of people. I still don't know why you're having such troubles with
> it, and I can only blame the artifacts you're working with and not the
> system itself at this point.
> 
> Wayne
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
> 
> 
> 

-- 
View this message in context: \
http://www.nabble.com/Grandparent-classes-not-found-at-compile-time-tp22733894p22795415.html
 Sent from the Maven - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic