without with the plugin generate create compiling java maven jar jersey executable-jar

java - with - La excepción jersey solo se lanza cuando las dependencias se agrupan en un solo contenedor



maven-jar-plugin (2)

¿Podrías publicar tu pom?

¿Marcas algunas dependencias según lo provisto? Es algo bastante diferente crear una aplicación independiente y una aplicación web, ya que se supone que el contenedor web (tomcat u otro) debe proporcionar algunos recipientes.

Como su contenedor está "incrustado" en su aplicación (y no en su aplicación en el contenedor), entonces quizás no administre correctamente estas dependencias.

Estoy escribiendo un servidor que incrusta Jetty w / Jersey. Cuando ejecuto desde Eclipse, todo es genial. Sin embargo, si ensamblo mi servidor y todas las dependencias en un único contenedor utilizando el ensamblaje de Maven: objetivo único, obtengo una excepción:

Sep 26, 2012 5:35:59 PM com.sun.jersey.spi.container.ContainerResponse write SEVERE: A message body writer for Java class com.acme.server.webservice. exception.WebServiceFailure, and Java type class com.acme.server.webserv ice.exception.WebServiceFailure, and MIME media type application/json was not fo und Sep 26, 2012 5:35:59 PM com.sun.jersey.spi.container.ContainerResponse write SEVERE: The registered message body writers compatible with the MIME media type are: */* -> com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 17:35:59.372 [qtp184245201-22 - /] ERROR o.a.h.ReflectorServletProcessor - onReq uest() javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A mess age body writer for Java class com.acme.server.webservice.exception.WebS erviceFailure, and Java type class com.acme.server.webservice.exception. WebServiceFailure, and MIME media type application/json was not found at com.sun.jersey.spi.container.ContainerResponse.write(ContainerRespons e.java:285) ~[vma-server-0.0.1-SNAPSHOT-jar-with-dependencies.jar:na] at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequ est(WebApplicationImpl.java:1457) ~[server-0.0.1-SNAPSHOT-jar-with-dependenc ies.jar:na]

...

El seguimiento completo está aquí, si es útil: https://gist.github.com/3790817

Maven no arroja errores mientras crea el jar-with-dependence.

Soy un principiante con Maven y el despliegue de Java, y realmente no estoy seguro de cómo proceder con la depuración.

Además, aunque necesito resolver este problema, también agradecería cualquier solución alternativa sugerida, ya que necesito producir una demostración ejecutable de mi servidor lo antes posible que un Pointy-Haired Boss (tm) pueda ejecutar sin Eclipse.

Solución:

Basándome en la respuesta de Pavel, dejé el plugin maven-assemly-plugin a favor del plugin maven-shade-plugin. Aquí está la configuración de sombras que funcionó para mí:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <!-- use transformer to handle merge of META-INF/services - see http://java.net/jira/browse/JERSEY-440?focusedCommentId=14822&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_14822 --> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" /> </transformers> <filters> <!-- filter to address "Invalid signature file" issue - see http://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>


No estás fusionando los frascos de Jersey correctamente.

Jersey 1.x utiliza el mecanismo META-INF / services para descubrir sus componentes y ensamble: single probablemente solo copia todo en un solo contenedor, anulando archivos ya presentes PERO META-INF / services file (s) necesita ser CONCATENADO.

Pruebe usar jersey-bundle ( com.sun.jersey:jersey-bundle:1.14 ) o arregle sus configuraciones de ensamblaje (o busque otro plugin para hacerlo mejor).