Issue
This question is about to clarify what exactly a transitive dependency is and how it works at very high level in Maven.
My definition: in a dependency tree like A --> B --> C, C is a transitive dependency for A. Assume B has scope compile within A.
If C has scope compile within B, then declaring B as dependency of A suffices to build A with Maven. But if C has scope provided within B then, when Maven builds A, the building will not automatically compile A against C unless A declares C among its dependencies.
Is this correct?
Solution
Your assumption is correct.
There are two types of Maven dependencies:
Direct: These are dependencies defined in your
pom.xml
file under the<dependencies/>
section.Transitive: These are dependencies that are dependencies of your direct dependencies.
Dependencies with provided
scope are meant to:
- Either be excluded from the final artifact (for example, for
war
files you would not want to includeservlet-api
,servlet-jsp
, etc) - Or overriden -- where the project that inherits these defines a version and/or overrides the scope
Answered By - carlspring
Answer Checked By - Terry (JavaFixing Volunteer)