Почему мой метод выдает ошибку NoSuchMethodError?

Я успешно реализовал метод ReflectEquals со списком исключенных полей.

return  EqualsBuilder.reflectionEquals(this, obj, new String[] {"files", "notes", "status"});

Однако недавно я скомпилировал свою программу на Java 1.5, и теперь я получаю следующую ошибку, когда программа попадает в указанную выше строку:

java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder.= ReflectionEquals(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/String;)Z

Если у кого-нибудь есть понимание, почему метод не существует во время выполнения, я был бы признателен.


person Jeffrey    schedule 14.05.2009    source источник


Ответы (3)


Каждая ошибка NoSuchMethodError, с которой я когда-либо сталкивался, (в конце концов) оказалась несоответствием между версией внешней библиотеки в пути к классам во время компиляции и версией библиотеки в пути к классам во время выполнения (т. е. — в этом случае, у вас будет другая версия apache commons в вашем пути к классам, когда приложение скомпилировано, чем когда оно запущено.)

Этот метод определенно был там, когда ваш код был скомпилирован, иначе была бы выдана ошибка компилятора.

Проверьте версии commons-lang.jar в ваших путях к классам — держу пари, вы найдете несоответствие.

Стоит отметить, что это НЕ ОТСУТСТВУЮЩИЙ jar-файл, который вызовет исключение ClassNotFoundException (возможно, в конечном итоге за которым последует NoClassDefFoundError).

person Jared    schedule 14.05.2009

Вероятно, это проблема с переменными аргументами. Обязательно перекомпилируйте все в java 1.5 и убедитесь, что вы запускаете его в java 1.5, и убедитесь, что вы ссылаетесь на тот же jar при компиляции, что и во время выполнения.

person Yishai    schedule 14.05.2009
comment
Я сомневаюсь в этом, поскольку его последний аргумент — это массив типа, отличного от Object. Обычно у вас возникают проблемы при использовании Object[] или при использовании null (что может привести к неоднозначным конструкторам). - person mihi; 09.06.2009

У вас может быть более старая версия в вашем пути к классам среды выполнения.

Получите последнюю версию Apache Commons Lang

person Mike Pone    schedule 14.05.2009