So, does Project C transitively depend on Sybase JConnect. Yes, of course! The "provided" dependency needs to be transitive.

Ultimately, when Project C gets deployed, Sybase JConnect needs to be somewhere on the runtime classpath in order for the application to function. It's valid for Project C to assume that Sybase JConnect is available and use JDBC all over the Project C code. Project C is safe to do this because it can happily deduce that Sybase JConnect will be there in the runtime environment because Project A NEEDS IT.

I've got Use Cases all over my aggregated build which make it absolutely critical and common sense that provided scope dependencies are transitive. For the (very rare) odd case where you don't want to inherit provided dependencies, you can <exclude/> them.

if C wants to use Sybase JConnect then it must declare this as a dependency. A could at any time change it's dependencies and "break" this assumption of C's.
It is wrong to use a dependency that you do not declare.

Andrew Williams
added a comment - 12/Mar/07 12:44 PM Your point may be correct, but your use case is wrong.
if C wants to use Sybase JConnect then it must declare this as a dependency. A could at any time change it's dependencies and "break" this assumption of C's.
It is wrong to use a dependency that you do not declare.

I still think this would be confusing to have one behaviour with the 4.0.0 version of the POM and another behaviour with the 5.0.0 version of the model. I honestly think this would be confusing and after several years with this behaviour making a new scope name for the new behaviour is the way to go.

Jason van Zyl
added a comment - 07/May/14 7:46 AM I still think this would be confusing to have one behaviour with the 4.0.0 version of the POM and another behaviour with the 5.0.0 version of the model. I honestly think this would be confusing and after several years with this behaviour making a new scope name for the new behaviour is the way to go.

I agree with Jason that the model version should not change.
I agree with other commiters saying that XML schema should not be changed.
Therefore a new scope should be introduced and we can call it something like "nonrunnable".
Thus the behavior of scope "provided" should not change in spec.

Tibor Digana
added a comment - 14/May/14 9:09 AM I agree with Jason that the model version should not change.
I agree with other commiters saying that XML schema should not be changed.
Therefore a new scope should be introduced and we can call it something like "nonrunnable".
Thus the behavior of scope "provided" should not change in spec.

If this conversation is really about controlling the transitive nature of a dependency, I think we should introduce a <transitive> boolean tag. That won't need a version update since it's a new tag (no one has used it before). Then instead of inventing new scopes, we can just let programmers determine it for themselves based on their own needs.

Paul Benedict
added a comment - 14/May/14 9:48 AM If this conversation is really about controlling the transitive nature of a dependency, I think we should introduce a <transitive> boolean tag. That won't need a version update since it's a new tag (no one has used it before). Then instead of inventing new scopes, we can just let programmers determine it for themselves based on their own needs.