Ошибка пути к классу: NoClassDefException:

Вот проблема, у меня есть один проект X, который использует услуги другого проекта Y. Y был экспортирован как jar-файл с использованием eclipse и добавлен в путь сборки X проекта. бывает так, что класс, который пружина загружает "classService" в X, не может быть загружен, потому что что-то не так с инициализацией зависимости в конструкторе remoteService, который находится в Y's StringEncryptorService. он говорит что-то о классе внутри jar в Y. ошибки компиляции нет, поэтому путь сборки хорош. Спасибо, впереди. Любой ответ будет оценен

INFO: Initializing Spring root WebApplicationContext
ERROR org.springframework.web.context.ContextLoader:319 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'classService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.package.common.security.StringEncryptorService com.package.service.classService.stringEncryptorService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stringEncryptorService' defined in URL [jar:file:/C:/Users/user/git/project/Project/WEB-INF/lib/package-common-0.111.jar!/com/package/common/security/StringEncryptorService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.package.common.security.StringEncryptorService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64

Я использовал commons-codec-1.8, который находится в проекте Y. я знаю, что могу переместить его файл jar в библиотеку, на которую ссылается Project X, но мне интересно, смогу ли я сделать это в Y, чтобы при создании другого проекта, скажем A, я мог просто экспортировать y в виде jar в A.

Редактировать: я думаю, что проблема в том, что весна не может найти общий кодек. поскольку он находится в библиотеке проекта Y, проект, который я экспортировал в проект X. можем ли мы что-то сделать, чтобы пружина в проекте X могла сканировать библиотеку проекта Y? или специально для библиотеки common-codec.jar. Поправь меня, если я ошибаюсь, если я говорю это неправильно.

Ответ: либо добавьте библиотеку явно в classpath X, скопировав в нее jar, либо добавьте ее в качестве внешнего jar в проект, либо добавьте проект в classpath в eclipse. Поскольку я хочу, чтобы библиотека common-codec.jar всегда была в библиотеке Project Y, мы просто добавили в application-context.xml Project X:

<bean id="StringEncryptorService" class="PackagePathInProjectY.StringEncryptorService"></bean>

Особая благодарность: Хариш Кумар. Спасибо, приятель..


2 ответа

org/apache/commons/codec/binary/Base64 не найден в вашем проекте, пожалуйста, добавьте commons-codec-1.8.jar в путь сборки X-проекта. Другой способ - это когда вы экспортируете проект Y-памятку, чтобы добавить commons- codec-1.8.jar в проекте Y вместе.

Определенно есть проблема с classpath в вашем развернутом проекте для tomcat. Можете ли вы проверить, есть ли в WEB-INF/lib эта библиотека? Если вы развертываете проект как war, то при сборке war или project X обе библиотеки должны быть объединены, а когда война взорвется на tomcat, в пути к классам должны быть найдены как библиотека Y, так и кодек commons. Вы можете связать общий кодек из Porject Y как часть сборки.

Хариш

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