【问题标题】:Two Maven Dependencies with different scope两个不同范围的 Maven 依赖项
【发布时间】:2018-09-21 17:40:34
【问题描述】:

如果我在同一个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 的依赖项。

【问题讨论】:

    标签: maven maven-dependency


    【解决方案1】:

    来自Introduction to the Dependency Mechanism - Dependency Scope

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

    (...)

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 2016-05-28
      • 2015-09-19
      • 2019-08-23
      • 1970-01-01
      • 2011-02-05
      相关资源
      最近更新 更多