Пакет Java, проект, ошибка NoSuchMethod
У меня есть 2 связанных проекта, и у каждого из этих 2 проектов есть пакет под ними.
XProject -> XPackage -> XClass -> X1Method (); X2Method ();
YProject -> YPackage -> YClass -> Y1Method ();
Я пытаюсь вызвать методы X1 и X2 из метода Y1. Я могу вызвать метод X1, но когда я вызываю метод X2, я получаю ошибку времени выполнения (java.lang.NoSuchMethodError:)
Все методы общедоступны, и с именами методов нет ничего плохого. Это просто бессмысленно, если один из них работает, а другой выдает ошибки во время выполнения.
Любая помощь будет оценена. Благодарю.
2 ответа
От java.lang.NoSuchMethodError
Javadoc:
Брошенный, если приложение пытается вызвать указанный метод класса (статический или экземпляр), и у этого класса больше нет определения этого метода.
Обычно эта ошибка отлавливается компилятором; эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось.
Другими словами, путь к классу времени выполнения не содержит класс с методом desied, хотя он был доступен в пути к классам компиляции. Подведем итог: ваш путь к классу испорчен. Очистите и выровняйте это. Как это сделать точно зависит от вашей среды.
Обновление: Таким образом, это веб-приложение Java EE в Eclipse? Предполагая, что один представляет собой динамический веб-проект, а другой - обычный Java-проект, в свойствах проекта динамического веб-проекта необходимо добавить обычный Java-проект в путь сборки и зависимости модуля Java EE.
Если это не решает проблему, то, скорее всего, путь к классу по умолчанию для сервера приложений или JRE является грязным. Вам нужно будет удалить все ненужные библиотеки, связанные с проектом, из JRE/lib
, JRE/lib/ext
а также Tomcat/lib
и пообещайте себе, что вы больше не трогаете эти пути к библиотекам;)
Очень вероятно, что вы компилируете против некоторого.class класса XClass в вашем classpath. Но у среды выполнения (вероятно, связанный проект) другая версия XClass. Это зависит от окружающей среды. Вы должны увидеть, какие артефакты находятся в вашем пути к классам во время компиляции и что выбирается во время выполнения;
Как прокомментировали другие. Для дальнейшего ответа требуются подробности относительно вашей IDE/ системы сборки или даже кода.