if your module requires the dependency to complie then it is a dependency of your module
what you describe as a "work around" is actually what you are supposed to do the real issue is that compile is transitive. compile needs to be transitive as a runtime dependency but should not be a transitive compile dependency in order to force you to list all your dependencies in your pom in short, if your module needs the dependency to compile, you should add it as a dependency and not rely on it being pulled in as a transitive dependency of anothe dependency of yours On 27/03/2009, Trinition <[email protected]> wrote: > > I'm confused about why transitive provided dependencies shouldn't be > included > at compile time. > > I have a project, "myapp-web", which defines a custom Servlet, MyServlet. > MyServlet extends a BaseServlet from "framework". BaseServlet extends a > Servlet class from "thirdparty", ThirdPartyServlet. ThirdPartyServlet in > turn implements the third party's CacheableServlet interface among other > things. > > myapp-web: MyServlet > framework: BaseServlet > thirdparty: ThidrdPartyServlet, CacheableServlet, etc. > > So myapp's pom declares a compile-time dependency on framework, and > framework declares a provided dependency on thirdparty. This is because the > thirdparty jar is available at runtime in my container, thus I don't want to > ever include it transitively for packaging. > > So when myapp-web compiles, it needs the definition of BaseServlet.class > which it finds in its compile time dependency of "framework". However, it > seems to not know about the definitions of BaseServelt's parent class > (MyServlet's grandparent class), ThirdPartyServlet. I get compile-time > errors like these: > > MyServlet.java:[199,20] cannot find symbol > symbol : variable this > location: class com.myapp.MyServlet > > MyServlet.java:[201,24] cannot find symbol > symbol : variable super > location: class com.myapp.MyServlet > > Because MyServlet extends BaseServlet which extends ThirdPartyServlet, > doesn't the compile NEED to know about all classes in the hierarchy in order > to compile? Thus, I would think anything that was available at compile time > during the building of BaseServlet COULD BE a compile-time dependency to > dependents of "framework" (such as "myapp-web"). > > So why does Maven NOT include provided dependencies transitively at compile > time? > > This is presently blocking me. My workaround is to explicitly add > "thirdparty" as a provided dependency to "myapp-web" so that the > ThirdPartyServlet and CacheableServlet definitions will be available at > compile time. But this is the very thing that transitive dependencies > solves for COMPILE dependencies (which are really COMPILED and PACKAGED). > Why not solve it for TRANSITIVE dependencies (whcich are COMPILED but NOT > PACKAGED). > -- > View this message in context: > http://www.nabble.com/Grandparent-classes-not-found-at-compile-time-tp22733894p22733894.html > Sent from the Maven - Users mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > 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]
