plugin files exclude example spring maven-assembly-plugin meta-inf

files - Idea para evitar que spring.handlers/spring.schemas se sobrescriban al fusionar mĂșltiples dependencias de primavera en un solo contenedor



maven-assembly-plugin example (2)

Obtuve el error Unable to locate NamespaceHandler when using context:annotation-config running (java -jar) un jar ensamblado por maven-assembly-plugin y que contiene mi proyecto y todas sus dependencias.

Como otras personas detectaron correctamente en el hilo de forum.springsource.org (mensaje # 7/8 ) el problema ocurre porque los archivos META-INF/spring.handlers y META-INF/spring.schemas que están presentes en diferentes jarras, se sobrescriben cuando maven-assembly-plugin reempaca los frascos en un solo archivo.

Al mirar el contenido de dos archivos spring - *. Jar, puede ver que los archivos se encuentran en la misma posición que 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 colocar la carpeta META-INF en un paquete específico? Si es así, la idea que sugeriría (espero que sea aplicable) es colocar 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 fusionen en un único contenedor. ¿Qué piensa usted al respecto?


Con Ant.

<!--define couple of properties to identify spring jar files--> <property name="spring-beans-jar" value="spring-beans-4.0.5.RELEASE.jar"/> <property name="spring-context-jar" value="spring-context-4.0.5.RELEASE.jar"/> <!--other properties--> <target name="dist" depends="compile" description="Prepare distribution"> <!--dump spring-context into build classes (or some place else)--> <unjar src="${lib.dir}/${spring-context-jar}" dest="${build.classes.dir}"/> <!--dump spring-beans on top of it overwriting META-INF/spring.* files--> <unjar src="${lib.dir}/${spring-beans-jar}" dest="${build.classes.dir}"/> <!--get overwritten META-INF/spring.* files of spring-context to some other place--> <unjar src="${lib.dir}/${spring-context-jar}" dest="${build.tmp.dir}"> <patternset> <include name="META-INF/spring.handlers"/> <include name="META-INF/spring.schemas"/> <include name="META-INF/spring.tooling"/> </patternset> </unjar> <!--skipped spring-beans/META-INF/spring.factories as its not present in spring-context--> <!--handled only spring-context and spring-beans as that''s what I needed at this point--> <!--append content from spring-context/META-INF/spring.* files--> <concat destfile="${build.classes.dir}/META-INF/spring.handlers" append="true"> <filelist dir="${build.tmp.dir}" files="META-INF/spring.handlers"/> </concat> <concat destfile="${build.classes.dir}/META-INF/spring.schemas" append="true"> <filelist dir="${build.tmp.dir}" files="META-INF/spring.schemas"/> </concat> <concat destfile="${build.classes.dir}/META-INF/spring.tooling" append="true"> <filelist dir="${build.tmp.dir}" files="META-INF/spring.tooling"/> </concat> <jar destfile="${build.dist.dir}/application.jar"> <fileset dir="${build.classes.dir}"/> <!--include all .jar files except already extracted ones--> <zipgroupfileset dir="${lib.dir}" includes="*.jar" excludes="${spring-beans-jar}, ${spring-context-jar}"/> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target>


Logré deshacerme del error usando el plugin shader en lugar del plugin ensamblador (buggy):

<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 recuerdo al autor. Felicitaciones a él de todos modos: p

aclamaciones