我使用依赖 POM,然后我将其作为依赖包含到另一个项目中。我遇到的问题是,当它聚合 POM 与这些依赖项时,它出现在我声明范围的依赖项时,提供,那些不包括在内。
是否可以在范围为提供的依赖项 POM 中包含提供的依赖项?我经常声明我需要什么 API,然后将实现作为运行时依赖项包含在内。
我使用依赖 POM,然后我将其作为依赖包含到另一个项目中。我遇到的问题是,当它聚合 POM 与这些依赖项时,它出现在我声明范围的依赖项时,提供,那些不包括在内。
是否可以在范围为提供的依赖项 POM 中包含提供的依赖项?我经常声明我需要什么 API,然后将实现作为运行时依赖项包含在内。
如果提供了依赖项,为什么不能以相同的范围继承该依赖项,所以我不必声明它?
它以相同的范围继承。给定以下父级pom.xml
:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow.Q3597684</groupId>
<artifactId>root</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Q3597684 - Root</name>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
以及从根工件继承的以下内容pom.xml
:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>root</artifactId>
<groupId>com.stackoverflow.Q3597684</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>child</artifactId>
<packaging>war</packaging>
<name>Q3597684 - Child</name>
<dependencies/>
</project>
从子节点运行mvn dependency:tree
会产生以下输出:
$ mvn dependency:tree[INFO] 正在扫描项目... [INFO] 搜索带有前缀的插件的存储库:“依赖”。 [信息] --------------------------------------------- ------------------------- [INFO] 建筑 Q3597684 - 儿童 [INFO] 任务段:[依赖:树] [信息] --------------------------------------------- ------------------------- [信息] [依赖:树{执行:默认-cli}] [信息] com.stackoverflow.Q3597684:child:war:1.0-SNAPSHOT [信息] +- javax.servlet:servlet-api:jar:2.5:provided [信息] \- junit:junit:jar:3.8.1:test [信息] --------------------------------------------- ------------------------- [信息] 构建成功 [信息] --------------------------------------------- -------------------------
servlet-api
正如预期的那样,所提供的就在那里。
您可能(错误)使用该dependencyManagement
部分吗?