NoSuchMethodError на одном компьютере, но не на другом - PullRequest
0 голосов
/ 16 марта 2011

У меня есть это приложение, которое вы можете запустить в пакетном режиме с макросами Java. У меня есть mymacro.java, который использует myjar.jar. Для простоты я поместил их все в тот же каталог, из которого запускаю приложение, поэтому classpath равен "./myjar.jar".

Команда для запуска приложения:

theapplication -classpath "./myjar.jar" -batch mymacro.java

, где тег -classpath делает то, что объявляет, то есть переопределяет путь к классам. Теперь это нормально работает на моем ПК с Windows XP. Тем не менее, я получаю NoSuchMethodError при запуске точно такой же вещи в кластере Linux.

java.lang.NoSuchMethodError: 
com.foo.bar.baz.theMethod(Ljava/lang/String;Ljava/lang/String;)I

Я не могу понять это. Тот же .java, тот же .jar, тот же theMethod. Путь к классам не может быть проще. Другие методы в myjar.jar вызываются без ошибок. Что может быть не так?

Кстати, я установил переменную окружения CLASSPATH равной "." на обеих машинах, чтобы исключить любые конфликты.

EDIT

Вывод java -version на моем ПК с Windows XP:

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

В кластере Linux:

java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode)

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Однажды я столкнулся с подобной проблемой из-за имен файлов используемых файлов JAR.В моем случае у меня было несколько JAR-файлов, таких как a.jar, b.jar, m.jar и N.jar.Один класс был продублирован как в m.jar, так и в N.jar.

. В Windows все работало, так как N.jar всегда загружалось после m.jar.Но после сжигания большого количества полуночной нефти я обнаружил, что проблема в * nix была связана с тем, что сначала загружается N.jar, а затем a.jar, b.jar, m.jar, поскольку имена файлов чувствительны к регистру в * nix в отличиев Windows.

Просто убедитесь, что у вас нет подобных проблем.

1 голос
/ 17 марта 2011

Argh. Приложение содержало модуль NetBeans, который в основном содержал тот же код, что и предыдущая версия моего JAR-файла. Таким образом, мой макрос java преимущественно обращался к методам в более старом NBM, а не к тем, которые были в моем новом файле JAR.

Ошибка исчезла, когда я удалил NBM.

Хороший способ тратить полный рабочий день!

0 голосов
/ 16 марта 2011

Присутствует ли

 com.foo.bar.baz.theMethod(Ljava/lang/String;Ljava/lang/String;)I

в новой версии банки?Если это не так, вероятно, mymacro.java был скомпилирован снова в версию jar, в которой он содержался

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