Search code examples
mavendependency-managementtransitive-dependency

transitive dependency defined in parent pom's dependency management


'Dependency1' transitively pulls 'dependency2' and I would like to manage 'dependency2' version in my project.

what version of 'dependency2' will be pulled in by project if I have both 'dependency1' and 'dependency2'in dependency management section in parent pom and just 'dependency1' child pom of the project?

something like this:

ParentPOM

<dependencyManagement>
  <dependencies>

        <dependency>
          <groupId> groupId </<groupId>
          <artifactId> artifact1 </artifactId>
          <version> version1 </version>
        </dependency>

        <dependency>
          <groupId> groupId </<groupId>
          <artifactId> artifact2 </artifactId>
          <version> version2 </version>
        </dependency>

  <dependencies>
<dependencyManagement>

ChildPOM

<dependencies>
   <dependency>
       <groupId> groupId1 </<groupId>
          <artifactId> artifact1 </artifactId>
          <version> version1 </version>
       </dependency>
  <dependencies>

Solution

  • You have to exclude transitive dependency from redefined artifact.

    Parent pom.xml:

    <dependencyManagement>
      <dependencies>
    
            <dependency>
              <groupId> groupId </<groupId>
              <artifactId> artifact1 </artifactId>
              <version>artifact1</version>
            </dependency>
    
            <dependency>
              <groupId> groupId </<groupId>
              <artifactId> artifact2 </artifactId>
              <version> version2 </version>
            </dependency>
    
      <dependencies>
    <dependencyManagement>
    

    Child pom.xml:

    <dependencies>
       <dependency>
           <groupId> groupId1 </<groupId>
              <artifactId> artifact1 </artifactId>
              <version> version1 </version>
              <exclusions>
                <exclude>
                  <groupId>groupId</groupId>
                  <artifactId>artifact2</artifactId>
                </exclude>
              </exclusions>
           </dependency>
      <dependencies>