我有一个名为我的图书馆我用 Maven 打包并存储在私有 Nexus 存储库中。它正确编译并上传到我的存储库,并在其中指定了以下依赖项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>
我将此依赖项包含在另一个项目中,我的孩子项目,使用以下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>
当我跑步时mvn clean install
in 我的孩子项目,看来maven能够找到并下载我的图书馆但不是嵌套依赖com.google.protobuf
除非我明确地将其包含在pom.xml
for 我的孩子项目。我可以确认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范围。我希望只列出嵌套依赖项我的图书馆并且不在我的孩子项目但似乎这不起作用。
首先,父pom.xml应该在dependency标签之外添加dependencyManagement标签。这只是为了在一处管理模块依赖项,而不是实际将它们导入到您的项目中。
您仍然需要在子模块 pom.xml 中声明它。 (但是你可以省略版本标签,因为它将从父pom继承)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)