Это не проблема Maven или Spring, так как оба не используют магию пути к классам.Это проблема вашего развертывания и упаковки.
Убедитесь, что оба модуля объявлены как имеющие область действия время выполнения (или значение по умолчанию) в вашем pom.xml
.Пакет .war
или .ear
, который вы упаковываете, должен содержать как файлы jar модуля, так и их зависимости.Никогда не копируйте никакие библиотеки в папку lib сервера, если вы действительно не знаете, что делаете.
Также убедитесь, что ваш окончательный архив не должен содержать повторяющихся записей !Это очень важно.Если вы используете Spring, убедитесь, что в вашем архиве приложений нет файлов spring.jar
, а есть только файлы spring-xxxxx.jar
.Если у вас есть, например, spring-beans.jar
и spring.jar
, что-то не так в вашем управлении зависимостями в poml.xml
.Также удалите библиотеки Spring, которые вы добавили в папку lib на сервере.
Проверьте версии ваших зависимостей.Хотя Maven должен защищать вас от большинства ошибок, убедитесь, что в вашем classpath нет библиотеки с несколькими версиями.
Если вы используете Class.forName(String)
, вам следует вместо Class.forName(String,ClassLoader)
и использовать приложенияClassLoader
.По умолчанию ClassLoader
, используемое Class.forName()
, является потоком ContextClassLoader
(TCCL).Не уверен, что это правильный вариант для вашего случая.Если вы используете какой-либо фреймворк, который выполняет динамическую загрузку классов, ткачество и т. Д., Вы можете попытаться установить TCCL по своему усмотрению.
Другой вариант, если все не удается, - проверить, нужно ли инвертировать ClassLoader
Модель делегации JBoss.См. JBoss Class Loader HOW-TO