【发布时间】:2016-10-31 22:26:58
【问题描述】:
我有一个名为 my-library 的库,我用 Maven 打包并存储在私有 Nexus 存储库中。它编译并正确上传到我的仓库,并在其pom.xml 文件中指定了以下依赖项:
<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>
我将此依赖项包含在另一个项目中,my-child-project,使用以下 pom.xml 块:
<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>
当我在 my-child-project 中运行 mvn clean install 时,maven 似乎能够找到并下载 my-library 但不是对 com.google.protobuf 的嵌套依赖,除非我将它明确包含在 my-child-project 的 pom.xml 中。我可以确认 Maven 在运行 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
...
这是嵌套库依赖项应该如何工作的方式吗?我认为其他依赖项中的嵌套依赖项由 Maven 在 compile 范围内自动解析和下载。我希望只列出 my-library 而不是 my-child-project 中的嵌套依赖项,但是好像不行。
【问题讨论】:
-
您的子项目是否有对父项目的引用?
-
尝试运行
maven --debug clean install看看它是否记录了一些有用的信息 -
@sirandy:是的,这是参考:
com.my.group my-library compile 1.0.0 -
@nandsito:使用
mvn --debug clean install没什么新意。它给了我同样的旧Compilation failure和package com.google.protobuf does not exist错误,这表明我的嵌套依赖项没有找到。 -
你的父项目pom有什么类型的包装?