Почему мой метод выбрасывает NoSuchMethodError? - PullRequest
2 голосов
/ 14 мая 2009

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

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

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

java.lang.NoSuchMethodError: org.apache.commons.lang.builder.EqualsBuilder. = reflectionEquals (Ljava / языки / объекта; Ljava / языки / объекта; [Ljava / языки / String;) Z

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

Ответы [ 3 ]

8 голосов
/ 14 мая 2009

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

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

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

Стоит отметить, что это НЕ a MISSING jar-файл - это вызовет исключение ClassNotFoundException (возможно, за которым в конечном итоге последует NoClassDefFoundError.)

1 голос
/ 14 мая 2009

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

0 голосов
/ 14 мая 2009

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

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

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