Пакет 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/ системы сборки или даже кода.

Другие вопросы по тегам