J'ai obtenu l'erreur Unable to locate NamespaceHandler when using context:annotation-config
exécuter (java -jar) un jar assemblé par le maven-assembly-plugin et contenant mon projet et toutes ses dépendances.
Comme d'autres personnes l'ont correctement remarqué sur le forum.springsource.org fil (message n° 7/8) le problème se produit parce que les fichiers META-INF/spring.handlers
et META-INF/spring.schemas
qui sont présents dans différents jars, sont écrasés lorsque le plugin maven-assembly repackage les jars dans un seul fichier.
En regardant le contenu de deux fichiers spring-*.jar, vous pouvez voir que les fichiers se trouvent à la même position par rapport au 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
N'est-il pas possible de placer le dossier META-INF dans un paquet spécifique ? Si c'est le cas, l'idée que je suggère (en espérant qu'elle soit applicable) est de placer le dossier META-INF dans un paquet spécifique. META-INF/spring.shemas
et META-INF/spring.handlers
sous le paquet auquel ils font référence.
$ 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
Ainsi, ils n'entreront pas en conflit lorsqu'ils seront fusionnés dans un seul bocal. Qu'est-ce que vous en pensez ?