¿Cómo crear un contenedor ejecutable basado en la spring con maven?

Tengo un proyecto de cliente Spring-WS basado en Maven que quiero empaquetar como un único contenedor. En eclipse, todo funciona correctamente. Cuando bash empaquetarlo como un archivo ejecutable, obtengo excepciones de ClassNotFound ya que los archivos jar de Spring no están incluidos en mi jar de aplicación.

Así que agregué maven-shade-plugin para incluir todas mis dependencias en mi jar de aplicación. Cuando miro mi jar de aplicación, veo todos los archivos de clase de todas las dependencias incluidas (todos los jar de la biblioteca están explotados).

   maven-compiler-plugin  1.6 1.6    org.apache.maven.plugins maven-jar-plugin 2.4    true com.cws.cs.Client      org.apache.maven.plugins maven-shade-plugin 1.7   package  shade       

Mi problema es que en el proceso de empaquetado, mis múltiples dependencias de muelles tienen diferentes archivos META-INF / spring.schemas que se anulan entre sí. En consecuencia, mi jar final tiene un archivo spring.schemas incompleto.

Así que cuando trato de ejecutar mi jar ejecutable, recibo los mensajes de error de Spring de que no se pueden encontrar los archivos porque el archivo spring.schemas está incompleto (el jarro de Spring-WS ha anulado el archivo spring.schemas de Spring-core).

Mi jar ejecutable es META-INF / spring.schemas:

 http\://www.springframework.org/schema/web-services/web-services-1.5.xsd=/org/springframework/ws/config/web-services-1.5.xsd http\://www.springframework.org/schema/web-services/web-services-2.0.xsd=/org/springframework/ws/config/web-services-2.0.xsd http\://www.springframework.org/schema/web-services/web-services.xsd=/org/springframework/ws/config/web-services-2.0.xsd 

En lugar de Spring-beans.jar META-INF / spring.schemas:

 http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd http\://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd http\://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd http\://www.springframework.org/schema/tool/spring-tool-3.0.xsd=org/springframework/beans/factory/xml/spring-tool-3.0.xsd http\://www.springframework.org/schema/tool/spring-tool-3.1.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd http\://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd http\://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd http\://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd http\://www.springframework.org/schema/util/spring-util-3.0.xsd=org/springframework/beans/factory/xml/spring-util-3.0.xsd http\://www.springframework.org/schema/util/spring-util-3.1.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd http\://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd 

Estoy perplejo. No estoy seguro de si puedo empaquetar todo como un solo archivo ejecutable. No sé si esto es un problema de configuración de complemento de tono, o si estoy tratando de hacer algo imposible. No parece correcto que tendría que crear manualmente mi propio archivo spring.schemas (una concatenación de los demás).

Puede que haya saltado un poco el arma. Al desenterrar más información sobre el plugin de sombras, noté el AnexorTransformer que me había perdido anteriormente. Sin embargo, mi preocupación es cómo saber qué otros archivos tienen los mismos problemas. He descubierto / atrapado este problema de spring en particular. No tengo idea de ninguna otra biblioteca que pueda estar haciendo algo similar …

Cualquier sugerencia sera apreciada.

En lugar de maven-shade-plugin usa onejar-maven-plugin . One-JAR le permite empaquetar una aplicación Java junto con sus Jars de dependencia en un único archivo Jar ejecutable.

Puede agregar la siguiente configuración para que los contenidos de los archivos .schema de todos los archivos jar se anexen.

    META-INF/spring.handlers   META-INF/spring.schemas    

Ayer me encontré con este problema también.

La solución fue preparar los archivos necesarios mediante la concatenación manual y la configuración del complemento de ensamblaje mediante esto:

    src/META-INF/spring.schemas META-INF   src/META-INF/spring.handlers META-INF     / true true runtime   META-INF/spring.handlers META-INF/spring.schemas     

NOTA: el uso de un enfoque de jar no es lo suficientemente bueno; no puede estar seguro de los archivos mezclados a mano, intente seguir exportando todas las dependencias como está …

¿Has probado el plugin maven-assembly-plugin ?

Creará un único contenedor con dependencias para usted y, además, puede hacer que este contenedor sea ejecutable:

Use mainClass para especificar la clase que desea ejecutar.

  maven-assembly-plugin 2.3   jar-with-dependencies    org.sample.App      make-assembly  package   single     
 assembly plugin have issues, use below plugin  org.apache.maven.plugins maven-shade-plugin   package  shade     at.seresunit.lecturemanager_connector.App   META-INF/spring.handlers   META-INF/spring.schemas       you may get security exception resolve it using below configuration    *:*  META-INF/*.SF META-INF/*.DSA META-INF/*.RSA