2

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.

4

1 回答 1

2

依赖机制介绍——依赖范围

  • compile
    • 这是默认范围,如果未指定则使用。编译依赖项在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。

(...)

  • runtime
    • 此范围表示依赖项不是编译所必需的,而是执行所必需的。它在运行时和测试类路径中,但不在编译类路径中。

因此,如果您有compile依赖项,runtime则已经包含在内,因此是多余的。

作为何时使用的示例runtime,以SLF4J日志记录 API 为例:您针对slf4j-api.jar( compiledependency) 编译源代码,而不是实际实现,它是单独分发的(并且有几个可供选择)。但是,在打包应用程序或运行单元测试时,Maven 仍应包含一个实现 jar,例如slf4j-simple.jarruntime依赖项),否则将不会记录任何内容。

于 2018-04-11T18:45:07.037 回答