Я получил ошибку Unable to locate NamespaceHandler when using context:annotation-config
при запуске (java -jar) файла jar, собранного модулем maven-assembly-plugin и содержащего мой проект и все его зависимости.
Как другие люди правильно заметили на форуме.springsource.org thread (message # 7/8) проблема возникает из-за того, что файлы META-INF/spring.handlers
и META-INF/spring.schemas
, присутствующие в разных jar-файлах, перезаписываются, когда подключаемый модуль maven-assembly-plugin переупаковывает jar-файлы водин файл.
Глядя на содержимое двух файлов 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
Таким образом, они не будут конфликтовать, когдаслил в одну банку.Что вы думаете об этом?