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]

Reply via email to