Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are my nested maven dependencies not showing up when compiling

Tags:

java

maven

I have a library named my-library which I packaged with Maven and stored on a private Nexus repository. It compiles and gets uploaded to my repo correctly and has the following dependencies specified in its pom.xml file:

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.13</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.1.0</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

I am including this dependency in another project, my-child-project, using the following pom.xml blocks:

<repositories>
    <repository>
        <id>MyRepo</id>
        <name>My Maven Repository</name>
        <url>http://localhost:8081/nexus/repo</url>
    </repository>
</repositories>
...
<dependencies>
    <dependency>
        <groupId>com.my.group</groupId>
        <artifactId>my-library</artifactId>
        <scope>compile</scope>
        <version>1.0.0</version>
    </dependency>
</dependencies>

When i run mvn clean install in my-child-project, it appears that maven is able to find and download my-library but not the nested dependency on com.google.protobuf unless i include it explicitly in the pom.xml for my-child-project. I can confirm that Maven can see my dependency but not the nested one when running mvn dependency:tree:

...
[INFO] +- org.springframework.data:spring-data-redis:jar:1.7.1.RELEASE:compile
[INFO] |  +- org.springframework.data:spring-data-keyvalue:jar:1.1.1.RELEASE:compile
[INFO] |  \- org.springframework:spring-oxm:jar:4.2.5.RELEASE:compile
[INFO] +- redis.clients:jedis:jar:2.8.1:compile
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
[INFO] +- com.my.group:my-library:jar:1.0.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.4:compile
...

Is this how a nested library dependency is supposed to work? I thought nested dependencies in other dependencies are automatically resolved and downloaded by Maven in compile scope. I was hoping to only list the nested dependency in my-library and not in my-child-project but it seems that doesn't work.

like image 360
nofunatall Avatar asked Oct 31 '16 22:10

nofunatall


1 Answers

First, the parent pom.xml should add dependencyManagement tag outside the dependencies tag. This is just to manage the modules dependencies in one place, but not actually import them into your project.

You still have to declare it in your child module's pom. (But you can leave out the version tag, as that will be inherited from the parent pom)

like image 181
herokingsley Avatar answered Oct 12 '22 07:10

herokingsley