To understand better it is advisable to look into the dependency tree of the pom. It will show the included transitive dependencies which got pulled in by the dependencies declared . So , with that we can understand why this results in any conflicts. For example, I had jackson-core(2.19.0) and then added jackson-binding(2.19.0). It started showing conflict saying issue with jackson-binding 2.19.0 having conflict with 2.18.3 . But I had no where jackson-binding 2.18.3 . So , when I looked at the dependency tree, I saw jackson-binding 2.19.0 was including transitive dependency jackson-core 2.18.3 . Hence, it resulted in conflict . Hope it helps to understand . P.S. the transitive dependencies can be excluded or we can tell our ide which version to be effective.