Tengo un proyecto de cliente Spring-WS basado en Maven que deseo empaquetar como un único contenedor. En eclipse, todo funciona correctamente. Cuando intento 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.¿Cómo crear un contenedor ejecutable basado en la primavera con maven?
Así que agregué el 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).
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.cws.cs.Client</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Mi problema es que en el proceso de envasado, mis múltiples dependencias de primavera tienen diferentes META-INF/spring.schemas archivos que anulan entre sí. En consecuencia, mi jar final tiene un archivo spring.schemas incompleto.
Así que cuando intento ejecutar mi jar ejecutable, recibo los mensajes de error de Spring de que no se pueden encontrar archivos porque el archivo spring.schemas está incompleto (el archivo Spring-WS ha anulado el archivo spring.schemas de Spring-core).
Mis META-INF del jar ejecutable/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 META-INF/spring.schemas Primavera-beans.jar:
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 salté el arma un poco. Al desenterrar más información sobre el plugin de sombras, noté el AppendingTransformer 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 primavera en particular. No tengo idea de ninguna otra biblioteca que pueda estar haciendo algo similar ...
Cualquier sugerencia sería apreciada.
enfoque alternativo que funciona muy bien es colocar frascos de primavera en la carpeta lib separada, y añadir esta carpeta 'lib' en la ruta de clase en el manifiesto - ver André Aronsen de respuesta http://stackoverflow.com/a/4323501/241986 –