I got the error
Unable to locate NamespaceHandler when using context:annotation-config running (java -jar) a jar assembled by the maven-assembly-plugin and containing my project and all its dependencies.
As other people correctly spotted on the forum.springsource.org thread (message #7/8) the problem occurs because the files
META-INF/spring.schemas that are present in different jars, get overwritten when the maven-assembly-plugin repackages the jars in a single file.
Looking at the content of two spring-*.jar files you can see the files sits in the same position relatively to the classpath
$ 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
Isn't it is possible to put the META-INF folder in a specific package? if so the idea i'd suggest, (hope it's applicable) is to put the
META-INF/spring.handlers files under the package they refer to.
$ 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
This way they won't conflict when merged in a single jar. what do you think about it?