slf4j版本冲突

cetgtptt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(553)

我意识到我的一个项目使用slf4j1.5.8,hibernate使用slf4j1.6。在使用maven构建时,它下载了两个jar,但我猜使用了1.5.8的类文件。因此,当我运行程序时,我得到以下错误:

SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6]

pom.xml 我已经把

<dependencyManagement>    
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencyManagement>

1.5.8是依赖的一部分,所以它是自己下载的。

ehxuflar

ehxuflar1#

排除是非常不必要的,可能是相当误导。相反,在projects pom文件中显式地包含slf4japi和所需的版本。就这样!
这种方法利用了maven的传递性规则:最近的依赖关系声明获胜。

eh57zj3b

eh57zj3b2#

您可以使用以下内容排除错误的版本:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate</artifactId>
  <version>3.2.7.ga</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </exclusion>
  </exclusions>
</dependency>
qmb5sa22

qmb5sa223#

正如您自己发现的,有两个库(hibernate和其他一些库)以两个不同的版本传递地导入slf4j。不幸的是,maven正在使用旧版本(在这种情况下,maven应该选择哪些依赖项有一些规则)。解决方法是添加 exclusion 在导入旧版本slf4j的依赖项中( com.example:foo-bar 以下是示例):

<dependency>
  <groupId>com.example</groupId>
  <artifactId>foo-bar</artifactId>
  <version>1.2.3</version>
   <exclusions>
     <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
     </exclusion>
   </exclusions>
</dependency>

如果您仍遇到此问题,请发布:

$ mvn dependency:tree

查找1.5.8版本,并将其从导入它的所有库中排除。

相关问题