我有一个名为 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>
我使用以下pom.xml
块将此依赖项包含在另一个项目 my-child-project 中:
<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-库 ,但不是com.google.protobuf
上的嵌套依赖项,除非我明确地将其包含在{{1>} my-child-project 。我可以确认 Maven 在运行pom.xml
时可以看到我的依赖关系但不能看到嵌套的依赖关系:
mvn dependency:tree
这是嵌套库依赖项应该如何工作的?我认为其他依赖项中的嵌套依赖项由Maven在编译范围内自动解析和下载。我希望只列出 my-library 中的嵌套依赖项,而不是 my-child-project ,但是它似乎不起作用。
答案 0 :(得分:1)
firtly,父pom.xml应该在dependencies标记之外添加dependencyManagement标记。它只是在一个地方管理模块依赖项,但实际上并没有将它们导入到你的项目中
你仍然有2个在你的子模块的pom中声明它(但你不能省略版本标签,实际上不能继承父模块pom)答案 1 :(得分:0)
@ herokingsley的回答让我得到了正确的配置。我犹豫不决,因为答案似乎表明我需要重新声明我孩子的嵌套依赖。当我最终尝试它时,我故意没有在 my-child-project 中声明嵌套依赖,它仍然像魅力一样工作。这是解决我的问题的代码。我将 my-library 中的代码更改为以下内容:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
上述更改已足够,因为在运行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.google.protobuf:protobuf-java:jar:3.1.0:compile
[INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.4:compile
...