Idea de evitar esa primavera.manipuladores / muelle.los esquemas se sobrescriben cuando se fusionan varias dependencias de primavera en un solo jar


Recibí el error Unable to locate NamespaceHandler when using context:annotation-config ejecutando (java-jar) un jar ensamblado por el plugin maven-assembly y conteniendo mi proyecto y todas sus dependencias.

Como otras personas vieron correctamente en el forum.springsource.org thread (mensaje #7/8) el problema ocurre porque los archivos META-INF/spring.handlers y META-INF/spring.schemas que están presentes en diferentes jars, se sobrescriben cuando el maven-assembly-plugin vuelve a empaquetar los jars en un solo archivo.

Mirando el contenido de dos spring-*.archivos jar que puede ver los archivos se encuentra en la misma posición relativa a la 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

¿No 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 manera no entrarán en conflicto cuando se fusionen en un solo frasco. ¿Qué te parece?

Author: javanna, 0000-00-00

1 answers

Me las arreglé para deshacerme del error usando el complemento shader en lugar del complemento ensamblador (con errores):

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>at.seresunit.lecturemanager_connector.App</mainClass>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Creo que encontré la solución en los foros de springsource.. ha pasado bastante tiempo desde que lo busqué.. realmente no puedo recordar al autor. Felicitaciones a él de todos modos: p

Salud

 83
Author: chzbrgla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-21 09:51:50