with shade plugin exclude dependency java maven jersey embedded-jetty

java - exclude - maven shade plugin maven



Problemas de Jersey con Maven-Shade Plugin (1)

Mi problema es muy similar a: excepción de Jersey solo lanzada cuando las dependencias se ensamblan en un solo contenedor

Ejecuto mi aplicación (jetty embedded + jersey) y todo funciona. Cuando intento crear un JAR ejecutable, obtengo el error:

org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteTo GRAVE: MessageBodyWriter no encontrado para el tipo de medio = application / json, type = class

Mi POM.XML:

<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>server.application.DeepDig</mainClass> </transformer> </transformers> <filters> <!-- filter to address "Invalid signature file" issue - see https://stackoverflow.com/a/6743609/589215 --> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> </plugins>


Me encontré con el mismo problema hace un tiempo. El problema es que los archivos de servicios no se fusionan. Lo siguiente funciona para mí:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>Foo</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> </transformers> </configuration> </plugin>

La causa principal del problema es que cada uno de varios contenedores relacionados con Jersey contiene un archivo de "servicios" en META-INF que contiene metadatos para que Jersey funcione correctamente. De forma predeterminada, el plugin de sombra selecciona uno de estos archivos y lo incluye en el frasco de grasa. Debido a que los metadatos de los otros archivos no están incluidos, Jersey no funciona correctamente.

Esta solución incluye el transformador adicional cuando se invoca el plugin de sombreado. Este transformador combina los datos en varios archivos en lugar de simplemente elegir uno de los archivos. De esta forma, todos los metadatos necesarios se incluyen en el frasco gordo y Jersey funciona correctamente.