Таинственный NoSuchMethodError и это не может быть путь к классу ... не так ли? - PullRequest
0 голосов
/ 13 июня 2011

Я боролся с этой ошибкой в ​​течение 3 часов.Я проверил путь сборки и путь к классам, и они одинаковы, это довольно большое веб-приложение, работающее на Tomcat и Geronimo, у него есть файл сборки для каждого компонента и затем один основной, который связывает их все вместе, но япросмотрел файлы сборки ant и сравнил их с другими в рабочих компонентах, которые используют сторонние библиотеки, и я не вижу различий.

<fileset dir="${home.dir}/component/lib" includes="*.jar"/>

Все вроде бы в порядке.Если я вызываю этот метод из теста JUnit, запускаемого из Eclipse, это не проблема, если я запускаю сервер, я получаю это исключение.

Также у меня есть две другие библиотеки, которые использует этот компонент, и я только что добавилэто как пользовательская библиотека в eclipse & в компонентах lib, указанных в build.xml, и она работает без проблем.Я пытался перемещать баночки, прибегая к методам проб и ошибок, когда логика, казалось, подводила меня, но пока не повезло.

Чтобы сделать ситуацию еще более странной, я помню, у меня была эта проблема с некоторым кодом, который я сам написал, чтодаже не в библиотеке.java.lang.NoSuchMethodError, поскольку eclipse иногда делает случайные вещи, я просто изменил имя метода и произвел очистку, и это сработало.

Я несколько раз пытался очистить и перестроить целое веб-приложение без изменений.

Мне хотелось бы получить несколько советов о том, как приблизиться к проблеме, чтобы я мог попытаться найти ошибку, как из-за одной проблемы отладки пути к классам есть где-либо еще, когда путь к классу защищен помимо файла сборки?

Буду признателен за любые предложения о том, как определить проблему.

Exception: java.lang.NoSuchMethodError [java] Message: com.google.common.collect.ImmutableMultimap.of()Lcom/google/common/collect/ImmutableMultimap; [java] ---- stack trace --------------------------------------------------------------- [java] java.lang.NoSuchMethodError: com.google.common.collect.ImmutableMultimap.of()Lcom/google/common/collect/ImmutableMultimap; [java] com.google.gdata.util.common.net.UriParameterMap.<clinit>(UriParameterMap.java:78) [java] com.google.gdata.client.Service.computeQueryMap(Service.java:2190) [java] com.google.gdata.client.Service.access$000(Service.java:94) [java] com.google.gdata.client.Service$ClientStreamProperties.<init>(Service.java:1839) [java] com.google.gdata.client.Service$ClientOutputProperties.<init>(Service.java:1986) [java] com.google.gdata.client.Service.writeRequestData(Service.java:2029) [java] com.google.gdata.client.Service.insert(Service.java:1408) [java] com.google.gdata.client.GoogleService.insert(GoogleService.java:599) [java] com.google.gdata.client.appsforyourdomain.AppsForYourDomainService.insert(AppsForYourDomainService.java:100) [java] za.co.venturenet.api.googleapps.GoogleAppsServices.createUser(GoogleAppsServices.java:437) [java] za.co.venturenet.api.googleapps.GoogleAppsServices.createUser(GoogleAppsServices.java:336) [java] za.co.venturenet.api.googleapps.GoogleAppsFacade.createNewVenturenetUser(GoogleAppsFacade.java:158)

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

NoSuchMethodError означает, что класс был найден, но указанный метод в этом классе не найден. Наиболее типичная причина этого - доступ к неправильной версии класса / библиотеки. Поскольку ваша проблема проявляется только при работе на сервере, я бы посмотрел на конфигурацию вашего сервера. Возможно, другая версия этой библиотеки подключена к системному загрузчику классов сервера (который будет впереди всего, что входит в ваше веб-приложение).

0 голосов
/ 11 сентября 2014

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

У меня была та же ошибка, и я пытался сделать то же самоеРешение: измените имя метода или добавьте пустую строку в файл Java, перестройте.Обычно это работает один раз.Но после запуска второго сервера NoSuchMethodError возвращает тот же идентификатор метода.

Моя среда затмения создает папку "target / classes", которая получает копию классов web-inf.Удаление этой папки, по-видимому, вылечило мои проблемы со случайным NoSuchMethodError, которые, вероятно, были вызваны невозможностью решить, какой экземпляр загрузить.

Ваш пробег может отличаться.

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