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]
