Я получил ошибку Unable to locate NamespaceHandler when using context:annotation-config
running (java -jar) jar, собранную модулем maven-assembly-plugin и содержащий мой проект и все его зависимости.
Как другие люди правильно заметили на форуме forum.springsource.org (сообщение # 7/8) проблема возникает из-за того, что файлы META-INF/spring.handlers
и META-INF/spring.schemas
которые присутствуют в разных банках, перезаписываются, когда maven-assembly-plugin переупаковывает банки в одном файле.
Глядя на содержимое двух файлов spring - *. jar, вы можете видеть, что файлы находятся в одной и той же позиции относительно пути к классам
$ jar tf spring-oxm-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Нельзя ли установить папку META-INF в конкретный пакет? Если это так, то я предлагаю (надеюсь, что это применимо) поставить файлы META-INF/spring.shemas
и META-INF/spring.handlers
в пакет, на который они ссылаются.
$ jar tf spring-oxm-3.0.3.RELEASE.jar
org/springframework/oxm/META-INF/spring.schemas
org/springframework/oxm/META-INF/spring.handlers
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
org/springframework/context/META-INF/spring.handlers
org/springframework/context/META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Таким образом, они не будут конфликтовать при объединении в одну банку. Что вы думаете об этом?