Recibí el error Unable to locate NamespaceHandler when using context:annotation-config
ejecutando (java -jar) un contenedor ensamblado por maven-assembly-plugin y conteniendo mi proyecto y todas sus dependencias.Idea para evitar que spring.handlers/spring.schemas se sobrescriban al fusionar varias dependencias de resorte en un solo contenedor
Como otras personas detectaron correctamente en el forum.springsource.org thread (message #7/8) El problema se produce porque los archivos META-INF/spring.handlers
y META-INF/spring.schemas
que están presentes en diferentes frascos, se sobreescriben, cuando el experto-montaje-plugin vuelve a empaquetar los frascos en un solo archivo.
Mirando el contenido de dos de primavera -. * Archivos jar se pueden ver los archivos se encuentra en la misma posición con respecto a la ruta de clase
$ 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
no es que es posible poner la carpeta META-INF en un paquete específico? Si es así, la idea que sugeriría (espero que sea aplicable) es poner los archivos META-INF/spring.shemas
y META-INF/spring.handlers
bajo el paquete al que se refieren.
$ 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
De esta forma no entrarán en conflicto cuando se combinen en un solo contenedor. ¿Qué piensa usted al respecto?
Probablemente no funcionará. Esperaría que cualquier código que se lea estos archivos use una llamada 'ClassLoader.getResource()', que se ve en la raíz del classpath. O (más probable) examina explícitamente los archivos en el classpath. – Anon
Sí, no funcionará simplemente moviendo los archivos en esa ubicación sin cambiar el código que lo carga. Me pregunto si esa es una mejor manera de organizar esa información, ya que mantiene las cosas en paquetes separados (también conocidos como espacios de nombres). Me gustaría enviar una solicitud de mejora a SpringSrouce si la idea es buena. –
Es posible que desee marcar la pregunta 26+ como una respuesta @ Xan. – Gray