[ http://jira.codehaus.org/browse/MNG-1978?page=comments#action_56639 ] 

David Boden commented on MNG-1978:
----------------------------------

>it's because your dependencies don't know anything about your environment, so 
>cannot assume it is provided.

That's a fair comment for some use cases.

However, my use case is that I've got a hierarchy of products and I have 
absolute control over their runtime environment. It is therefore quite 
appropriate and useful for me to make sweeping assumptions about the runtime 
environment in the base modules.


If you're distributing a web app which depends on something with "provided" 
dependencies then at the end of the day that dependency needs to be on the 
runtime classpath. You have 2 choices of how to get it there (2 use cases):
1. Package it up in your war file. This means "upgrading" the provided 
dependency to a compile dependency.
2. Make sure it's available to the container that's hosting the webapp.

In both these cases, the provided dependencies are much better off being 
transitive. You should be able to "upgrade" them to compile time dependencies. 
The point that I'm trying to make is that once you've declared a provided 
dependency in a sub-module then in all super-modules the scope of the 
dependency is "at least" provided. It needs to ultimately be there on the 
runtime classpath for any of the super-modules.

> "Provided" scope transitive dependencies required + exclude dependencies for 
> runtime scope only
> -----------------------------------------------------------------------------------------------
>
>          Key: MNG-1978
>          URL: http://jira.codehaus.org/browse/MNG-1978
>      Project: Maven 2
>         Type: New Feature

>   Components: documentation - faqs
>     Versions: 2.0.2
>     Reporter: David Boden
>      Fix For: documentation

>
>
> Why are provided scope dependencies not transitive?
> I have several examples in my project where I need to declare a dependency as 
> on the compilation classpath but not on the runtime classpath and I need it 
> to be transitive. I don't want the dependency to be packaged up in my 
> deployment artifact but my entire multi-project hierarchy relies on the 
> dependency.
> At the moment, I have to workaround the problem, mostly by declaring 
> duplicate provided scope dependencies in multiple projects.
> If there's a well-known answer to this query then apologies, could it be 
> placed in the "Introduction to Dependency Mechanism" documentation.
> I would also be able to model my dependency structure more accurately if I 
> could <exclude/> a dependency from the runtime classpath only and keep it in 
> the compile classpath.
> E.g. 
>     <dependencies>
>         <dependency>
>             <groupId>SalesStation</groupId>
>             <artifactId>cds_ss_shared</artifactId>
>             <version>SNAPSHOT</version>
>             <exclusions>
>                 <exclusion>
>                     <groupId>SalesStation</groupId>
>                     <artifactId>ss_base_shared</artifactId>
>                     <!-- I want to be able to do this: -->
>                     <scope>runtime</scope> <!-- Exclude from runtime 
> classpath only, not compile classpath -->
>                 </exclusion>
>             </exclusions>
>         </dependency>
>     </dependencies>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to