如果我在同一个pom.xml
文件中有以下两个依赖项:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
我想删除冗余。那么我应该删除范围为runtime
的那个,因为它包含在另一个依赖项中吗?
此外,我很高兴理解为什么要指定范围为runtime
的依赖项。
答案 0 :(得分:2)
来自Introduction to the Dependency Mechanism - Dependency Scope:
compile
- 这是默认范围,如果未指定,则使用此范围。编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。
(...)
runtime
- 此范围表示编译不需要依赖项,但是用于执行。它位于运行时和测试类路径中,但不是编译类路径。
因此,如果您有compile
依赖项,runtime
已经包含在内,因此是多余的。
作为何时使用runtime
的示例,请使用SLF4J日志记录API:您针对slf4j-api.jar
(compile
依赖项)编译源代码,但不是实际实现,它是单独分发的(有几个可供选择)。但是,在打包应用程序或运行单元测试时,Maven应该仍然包含一个实现jar,例如: slf4j-simple.jar
(runtime
依赖项),因为否则不会记录任何内容。