Как исправить ошибку NoSuchMethodError? - PullRequest
146 голосов
/ 30 августа 2008

Я получаю ошибку NoSuchMethodError при запуске моей Java-программы. Что не так и как мне это исправить?

Ответы [ 27 ]

0 голосов
/ 24 декабря 2012

Чтобы ответить на оригинальный вопрос. Согласно Java документам здесь :

«NoSuchMethodError» Брошенный, если приложение пытается вызвать определенный метод класса (статический или экземпляр), и у этого класса больше нет определения этого метода.

Обычно эта ошибка отлавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось.

  1. Если это происходит во время выполнения, проверьте, что класс, содержащий метод, находится в пути к классам.
  2. Проверьте, добавили ли вы новую версию JAR и совместим ли метод.
0 голосов
/ 06 июля 2016

У меня была такая же проблема. Это также вызвано тем, что в классах есть неоднозначность. Моя программа пыталась вызвать метод, который присутствовал в двух файлах JAR, находящихся в одном и том же месте / пути к классам. Удалите один файл JAR или выполните свой код так, чтобы использовался только один файл JAR. Убедитесь, что вы не используете один и тот же JAR или разные версии одного и того же JAR, которые содержат один и тот же класс.

DISP_E_EXCEPTION [шаг] [] [Z-JAVA-105 Java-исключение java.lang.NoSuchMethodError (com.example.yourmethod)] * ​​1004 *

0 голосов
/ 20 августа 2013

Я столкнулся с подобной проблемой, когда менял сигнатуры методов в своем приложении. Очистка и перестройка моего проекта разрешили «NoSuchMethodError».

0 голосов
/ 18 февраля 2019

NoSuchMethodError: Я потратил пару часов на исправление этой проблемы, наконец исправил ее, просто переименовав имя пакета, очистив и собрав ... Сначала попробуйте выполнить чистую сборку, если она не работает, попробуйте переименовать имя класса или имя пакета и очистить построить ... это должно быть исправлено. Удачи.

0 голосов
/ 31 января 2018

В большинстве случаев java.lang.NoSuchMethodError обнаруживается компилятором, но иногда это может происходить во время выполнения. Если эта ошибка возникает во время выполнения, единственной причиной может быть изменение структуры класса, которое сделало ее несовместимой.

Лучшее объяснение: https://www.journaldev.com/14538/java-lang-nosuchmethoderror

0 голосов
/ 09 апреля 2019

У меня была такая же ошибка:

  Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonGenerator.writeStartObject(Ljava/lang/Object;)V
        at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:151)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)

Чтобы решить эту проблему, я проверил, во-первых, Диаграмма зависимостей модуля (click in your POM the combination -> Ctrl+Alt+Shift+U или right click in your POM -> Maven -> Show dependencies), чтобы понять, где именно был конфликт между библиотеками (Intelij IDEA). В моем конкретном случае у меня были разные версии зависимостей Джексона.

enter image description here enter image description here

1) Итак, я прямо добавил в свой POM проекта самую высокую версию - 2.8.7 из этих двух.

В свойствах:

<jackson.version>2.8.7</jackson.version>

И как зависимость:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

2) Но это также можно решить с помощью Исключения зависимостей .

По тому же принципу, что и в примере ниже:

  <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
      <version>1.0</version>
          <exclusions>
             <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
             </exclusion>
         </exclusions>
  </dependency>

Зависимость с нежелательной версией будет исключена из вашего проекта.

0 голосов
/ 12 января 2015

Если имя вашего файла отличается от имени класса, в котором содержится метод main, возможно, эта ошибка может быть причиной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...