What is a transitive Maven dependency?

MavenDependenciesTransitive Dependency

Maven Problem Overview


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?

Maven Solutions


Solution 1 - Maven

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 include servlet-api, servlet-jsp, etc)
  • Or overriden -- where the project that inherits these defines a version and/or overrides the scope

Solution 2 - Maven

As an example, if we added JUnit as a dependency in pom.xml under <dependencies> tag. It will download the other hamcrest-core-1.3.jar file and it is under Maven Dependencies, This .jar file can be called Transitive dependency.

enter image description here

Resource:- https://youtu.be/ypVE8EgDzzI

Solution 3 - Maven

A dependency that should be included when declaring project itself is a dependency

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJohanView Question on Stackoverflow
Solution 1 - MavencarlspringView Answer on Stackoverflow
Solution 2 - MavenSupun SandaruwanView Answer on Stackoverflow
Solution 3 - MavenmahsaView Answer on Stackoverflow