java.lang.NoMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString

Я получаю следующее исключение в моем веб-приложении:

 java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError:     org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString([B)Ljava/lang/String;

Commons-codec-1.5.jar добавлен в мой путь к классам. Я строю его с помощью Ant и добавил зависимости вручную. В ходе других обсуждений той же проблемы я обнаружил, что добавление источника этой библиотеки может решить проблему, но это не сработало для меня. Я также читал, что наличие другой библиотеки с тем же классом может вызвать конфликт, и, возможно, этот класс может не иметь этого метода, что приводит к ошибке. Тем не менее, я дважды проверил, что нет другой версии той же библиотеки. Возможно ли, что какая-то другая библиотека имеет такой же класс? Если да, то как я могу определить это и решить проблему?

1 ответ

Как вы намекаете в своем вопросе, это происходит, когда другая версия Base64 класс используется во время компиляции для класса, подобранного во время выполнения. Поскольку вы используете Ant (а не Maven, например), найти виновника будет проще, поскольку вам не нужно беспокоиться о переходных зависимостях.

Первое, что нужно сделать, это использовать IDE, чтобы открыть класс Base64 (Ctrl+N в IntelliJ), это выделит, сколько разных версий этой библиотеки находится на вашем пути к классам. В моем случае их было 2. Если у вас их больше, то вы нашли своего виновника.

Если у вас есть только одна версия в вашем пути к классам, то единственное место, где может находиться этот класс, - это каталог lib Tomcat. Возможно, вам придется открыть файлы JAR вручную, чтобы увидеть, если какие-либо содержат тот же пакет org.apache.commons.codec.binary...,

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