我有一个名为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>
Run Code Online (Sandbox Code Playgroud)
我使用以下块将这种依赖关系包含在另一个项目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>
Run Code Online (Sandbox Code Playgroud)
当我运行mvn clean install
在我的孩子项目,看来Maven是能够找到和下载我的图书馆,但不是嵌套的依赖上com.google.protobuf
,除非我明确包括它在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
...
Run Code Online (Sandbox Code Playgroud)
嵌套库依赖关系应该这样工作吗?我认为其他依赖关系中的嵌套依赖关系会由Maven在编译范围内自动解决并下载。我希望只在我的库而不是my-child-project中列出嵌套的依赖项,但这似乎不起作用。
小智 1
首先,父pom.xml应该在dependency标签之外添加dependencyManagement标签。这只是为了在一处管理模块依赖项,而不是实际将它们导入到您的项目中。
您仍然需要在子模块的 pom.xml 中声明它。(但是你可以省略版本标签,因为它将从父pom继承)
归档时间: |
|
查看次数: |
1008 次 |
最近记录: |