Thanks for clearing that up. I think this discussion made it more clear what is the difference among provided, optional and exclusions. Sorry if I confused anyone.
Bashar -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Craig McClanahan Sent: Tuesday, February 06, 2007 11:18 PM To: Maven Users List Subject: Re: dependencies are bloated in M2 On 2/6/07, Bashar Abdul Jawad <[EMAIL PROTECTED]> wrote: > > Yes, but sometimes you will need to use a dependency for compile time > only, > and NOT for runtime. You don't need the container to provide it for you > either because it is not required for runtime. Example: aspectjtools.jar. > You can't exclude it because your project will not compile. The only way > is > to give it the provided scope. That is not correct. Declaring a dependency to be optional puts it on the compile classpath, but avoids any attempt to include it at runtime. Even if your container doesn't provide it > that's not a problem, maven doesn't care. I know it is not very clean to > give a dependency a provided scope when it's not going to be provided > anywhere, but sometimes you need to do this if you want to compile against > it. The semantics of "provided" are different than "optional" even though Maven does not enforce it. The code you write against a "provided" API assumes that the API will indeed be provided by the container. As an example, you might declare as "provided" a library that you've installed in Tomcat's common/lib directory. The library must be there in order for the application to function -- but Maven can assume that it will indeed by supplied by the container, so won't include it in the WAR. "Optional", on the other hand, means what it says. Declaring such a dependency means that you will need it available at compile time FOR THE DEPENDENCY, but not necessarily for your own code (unless you explicitly need it for other reasons). The library is explicitly NOT required at runtime, because your dependency has said, in effect, "I can use this library if it exists, but if it does not, no harm no foul." Note also that "optional" is NOT a scope -- it is a completely separate element. That is because the concept of being optional is orthogonal to scope ... it's perfectly reasonable, for example, to have an optional module with "compile" scope if your build process knows how to intelligently deal with that combination. PLEASE do not misuse "provided" scope to mean the "optional" element or vice versa. PLEASE set up your POMs to say what you mean. These are two DIFFERENT concepts! Craig Bashar > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Carlos > Sanchez > Sent: Tuesday, February 06, 2007 5:18 PM > To: Maven Users List > Subject: Re: dependencies are bloated in M2 > > still not right, you have to use exclusions > provided means the environment (read appserver) "provides" that > dependency, which is only true for few dependencies in the whole > world, like servlet-api > > On 2/6/07, Bashar Abdul Jawad <[EMAIL PROTECTED]> wrote: > > > > This is the question I was answering: > > > > >Tandon, Pankaj wrote: > > > > > >1. How can we control what get's into WEB-INF/lib. We tried all the > > >scopes mentioned, but that did not help. > > > > And it's follow up: > > > > > >Christian Goetze wrote: > > > > > > > > I believe that the scope that should work is "provided". The problem > is > > > > that I don't know if maven is smart enough to remove a provided > > > > dependency from the transitive closure. I would call that a bug if > it > > > > didn't. > > > > And the answer to these 2 questions is to use the provided scope. It > will > > also stop a dependency from being passed on transitively. Using > exclusions > > is NOT right if you still want to compile against these dependencies. > > > > Bashar > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Carlos > > Sanchez > > Sent: Tuesday, February 06, 2007 5:02 PM > > To: Maven Users List > > Subject: Re: dependencies are bloated in M2 > > > > exactly, that's why he needs to use exclusions, you exclude things > > that you don't need. > > > > On 2/6/07, Bashar Abdul Jawad <[EMAIL PROTECTED]> wrote: > > > It is the right solution. Using exclusions will exclude a dependency > from > > > being downloaded at all, which means it won't be available at any > path. > > > Using provided will still make the dependency available for compile > time, > > > but not in runtime, and will not bundle it in the package. > > > > > > Read maven FAQ: > > > > > > http://maven.apache.org/general.html#scope-provided > > > > > > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of > Carlos > > > Sanchez > > > Sent: Tuesday, February 06, 2007 4:29 PM > > > To: Maven Users List > > > Subject: Re: dependencies are bloated in M2 > > > > > > that's not the right solution, you have to use exclusions > > > > > > On 2/6/07, Bashar Abdul Jawad <[EMAIL PROTECTED]> wrote: > > > > It will. If you don't want to include a particular dependency in > your > > > > generated package just give it the provided scope, it will be > excluded > > > even > > > > if it was a transitive dependency of something else. > > > > > > > > Bashar > > > > > > > > -----Original Message----- > > > > From: Christian Goetze [mailto:[EMAIL PROTECTED] > > > > Sent: Tuesday, February 06, 2007 2:58 PM > > > > To: Maven Users List > > > > Subject: Re: dependencies are bloated in M2 > > > > > > > > Tandon, Pankaj wrote: > > > > > > > > > > > > > > > > > > >So the questions are: > > > > >1. How can we control what get's into WEB-INF/lib. We tried all the > > > > >scopes mentioned, but that did not help. > > > > > > > > > I believe that the scope that should work is "provided". The problem > is > > > > that I don't know if maven is smart enough to remove a provided > > > > dependency from the transitive closure. I would call that a bug if > it > > > > didn't. > > > > > > > > -- > > > > cg > > > > > > > > > --------------------------------------------------------------------- > > > > 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] > > > > > > > > > > > > > > > > > -- > > > I could give you my word as a Spaniard. > > > No good. I've known too many Spaniards. > > > -- The Princess Bride > > > > > > --------------------------------------------------------------------- > > > 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] > > > > > > > > > > > > -- > > I could give you my word as a Spaniard. > > No good. I've known too many Spaniards. > > -- The Princess Bride > > > > --------------------------------------------------------------------- > > 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] > > > > > > > -- > I could give you my word as a Spaniard. > No good. I've known too many Spaniards. > -- The Princess Bride > > --------------------------------------------------------------------- > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]