I am using maven 2 on a project and I recently discover that maven2 downloads 
many jars for my project even though my project has few dependencies.  All of 
my dependencies are in the provided scope as I expect the application server my 
application runs in will provide them.  It turns out the extra jars maven 
downloaded are never used.

Upon futher investigation, I come across a documentation on apache's maven site 
explaining transitive dependencies.  About half way down in the document 
there's table illustrating what dependencies will be loaded by maven.  This 
table is copied below.

     compile provided runtime test 
      compile compile(*) - runtime - 
      provided provided provided provided - 
      runtime runtime - runtime _ 
      test test - test - 


According to the table, a provided dependency's dependencies will be loaded in 
as provided except the test dependencies (third row of the table).  Why is this?

By definition, a dependency in the provided scope is only needed at compile 
time, and it is not available at runtime or during tests.  So I will never need 
any of the dependency's dependencies for compilation.  Why does maven2 download 
the dependency's compile, provided and runtime scope dependencies?  I can 
understand if I need a dependency at runtime, then I will probably need the 
dependency's runtime dependencies also.  But why would maven2 follow the 
dependency graph for a dependency not needed at runtime?  Shouldn't the 
"provided" row above be like this?

      provided - - - - 



As it stands now, my repository grew very large quickly because maven download 
everything in the dependency graph.  This seems to be a bug to me.

Mitch


Reply via email to