【问题标题】:Is it a standard practice to explicitly exclude dependencies?明确排除依赖项是标准做法吗?
【发布时间】:2022-01-15 17:35:28
【问题描述】:

例如,在我的pom.xml

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.15.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.15.0</version>
    </dependency>

由于某些原因,依赖关系图如下:

因此,log4j-api 存在冲突(2.7 与 2.15)。

要解决此问题,我可以在 log4j-core 依赖项中明确排除 log4j-api。但是,这实际上是一种标准做法吗,因为由于依赖管理,无论如何都会使用log4j-api 2.15.0

【问题讨论】:

    标签: java spring-boot maven log4j2


    【解决方案1】:

    首先,如果一个应用程序在 2.7 版中使用 log4j-api,这甚至 5 年都没有升级,除了我认为 api 没有被更改(这 api 部分暗示)所以你应该或只能替换实现(log4j-core)并使用更新的版本。您可以通过像这样的排除项来排除依赖项。

    <project>
      ...
      <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
          <version>2.15.0</version>
          <exclusions>
            <exclusion>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-api</artifactId>
            </exclusion>
          </exclusions> 
        </dependency>
      </dependencies>
    </project>
    

    这也可以在dependencyManagement 中完成,这样会更好...这样我就不排除这里的 api...

    【讨论】:

    • 我知道上面可以做到...只是想知道哪种方法正确:明确排除它还是让依赖管理处理它?
    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 2017-09-08
    • 2016-11-20
    • 2011-08-15
    • 2016-02-12
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多