Исключение выдается при использовании logback / slf4j - PullRequest
17 голосов
/ 23 августа 2011

Я использую slf4j 1.6.2 api jar (пробовал также использовать 1.6.1) - версия для входа в систему 0.9.29 (core & classic).Я использую JDK1.6 на Ubuntu.Полученное исключение копируется ниже.

Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
    at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:112)
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:471)
    at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:427)
    at ch.qos.logback.classic.Logger.info(Logger.java:631)

Я также получаю сообщение с жалобой на несоответствие привязки slf4j.

"SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.9, 1.5.10, 1.5.11]"

Ответы [ 7 ]

25 голосов
/ 24 августа 2011

Очень похоже, что версия slf4j-api.jar, загружаемая JVM, имеет версию 1.5.x.У вас наверняка есть slf4j-api-1.5.x.jar на вашем пути к классам (в дополнение к slf4j-api-1.6.2.jar).Проверьте свой путь к классу.

9 голосов
/ 16 июля 2014

Может помочь добавление следующих зависимостей:

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

  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.7.7</version>
  </dependency>

  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>1.7.7</version>
  </dependency>

  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>log4j-over-slf4j</artifactId>
      <version>1.7.7</version>
  </dependency>

  <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.7.7</version>
  </dependency>
8 голосов
/ 18 января 2013

версия slf4j-api не соответствует версии привязки:

Привязка SLF4J обозначает артефакт, такой как slf4j-jdk14.jar или slf4j-log4j12.jar, используемый для привязки slf4j к базовой структуре ведения журнала, скажем, java.util.logging и соответственно log4j.

Смешивание разных версий slf4j-api.jar и SLF4J может вызвать проблемы. Например, если вы используете slf4j-api-1.7.2.jar, вам также следует использовать slf4j-simple-1.7.2.jar, использование slf4j-simple-1.5.5.jar работать не будет.

ПРИМЕЧАНИЕ. С точки зрения клиента, все версии slf4j-api совместимы. Клиентский код, скомпилированный с slf4j-api-N.jar, будет отлично работать с slf4j-api-M.jar для любых N и M. Вам нужно только убедиться, что версия вашей привязки соответствует версии slf4j-api.jar. Вам не нужно беспокоиться о версии slf4j-api.jar, используемой данной зависимостью в вашем проекте. Вы всегда можете использовать любую версию slf4j-api.jar, и если версия slf4j-api.jar и его привязка совпадают, у вас все будет в порядке.

Во время инициализации, если SLF4J подозревает, что может быть проблема несовпадения версий API и привязки, он выдаст предупреждение о подозреваемом несовпадении.

Получено с http://www.slf4j.org, Надеюсь, это поможет.

1 голос
/ 12 октября 2016

Мы должны выровнять версии slf4j-api и соответствующую привязку, в моем случае я использовал slf4j-log4j12 в соответствии с документацией SLF4J:

http://www.slf4j.org/codes.html#version_mismatch

Я заменяю версии обеих библиотек, включенных в качестве транзитивных зависимостей, помещая в мою строку следующее:

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

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.1</version>
    </dependency>

Надеюсь, это кому-нибудь поможет.

С уважением,

Jaider

1 голос
/ 28 августа 2011

Кроме того, у вас должно быть много jar-версий slf4j-api версий, упомянутых в [].Попробуйте сохранить в classpath одну версию slf4j-api и соответствующие совместимые банки slf4j-log4j .

Смешивание разных версий файлов slf4j всегда будет проблематичным

Ошибка NoSuchMethodError вызвана обнаружением методов с одним и тем же именем более одного раза, вероятно, из разных версий одних и тех же jar-файлов

0 голосов
/ 19 августа 2017

Это может быть больше "я тоже", но я постараюсь наметить более полное решение. Я смешал в своем продукте много программного обеспечения из разных источников. Я столкнулся с этой проблемой сначала с JAR NiFi, затем совсем недавно с JAR Cassandra снова и снова. Я уже настоял в pom.xml , что у меня везде одна и та же версия slf4j:

<slf4j.version>[1.7.25]</slf4j.version>
...
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>${slf4j.version}</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>${slf4j.version}</version>
</dependency>
... (all the slf4j JARs I needed)

Затем я сказал Мейвену, что хочу Кассандру без того, что она принесла для slf4j:

<dependency>
  <groupId>org.apache.cassandra</groupId>
  <artifactId>cassandra-all</artifactId>
  <version>${cassandra.version}</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
    </exclusion>
</dependency>

Однако, как и вы, я получал жалобы от

Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.arrayFormat(Ljava/lang/String;[Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
  at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:112)

Из зависимости mvn: дерево я обнаружил, что получаю logback 1.1.3, который не соответствует тому, что, по-видимому, использует Кассандра (0.9 - что-то вроде вас). Итак, я также исключил получение logback, добавив эти исключения к уже существующим slf4j:

<dependency>
  <groupId>org.apache.cassandra</groupId>
  <artifactId>cassandra-all</artifactId>
  <version>${cassandra.version}</version>
  <exclusions>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
    <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
    </exclusion>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
    </exclusion>
    <exclusion>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </exclusion>
</dependency>

... после чего проблема, с которой я столкнулся, и которую вы здесь сообщаете, ушла. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 25 мая 2016

У меня было точно такое же сообщение об ошибке. Я решил это, исключив зависимость org.apache.directory.server:apacheds-all. Каким-то образом эта банка переопределяет

...