NoSuchMethodError al inicio en la aplicación Java Jersey

He estado recibiendo un error muy extraño al intentar iniciar una aplicación de Jersey en Tomcat. El mismo código funciona en otras computadoras. Intenté volver a instalar Tomcat, todas mis dependencias maven, incluso Eclipse y Java, no tuve suerte. Parece que se está cargando una mala versión de Jersey, creo.

Cualquier puntero en la dirección correcta será apreciado.

Aquí está el pom efectivo: http://pastebin.com/NacsWTjz

Y el pom real: http://pastebin.com/H6sHe4ce

2015-02-13 13:43:40,870 [localhost-startStop-1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/middleware-server] - StandardWrapper.Throwable java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:304) at org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:285) at org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170) at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358) at javax.servlet.GenericServlet.init(GenericServlet.java:158) at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1031) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4901) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5188) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 

Nota: Por favor, consulte los comentarios anteriores para mayor discusión y consejos.

Este error habitual significa que tiene un jar JAX-RS 1 y JAX-RS 2 en el classpath. Jersey 2 usa JAX-RS 2 ( javax.ws.rs-api-2.0.1.jar ), pero si también tiene el jsr311-api.jar , que es JAX-RS 1, hay un javax.ws.rs.core.Application en cada jar. Pero la aplicación jsr311-api no tiene el método getProperties() (de ahí NoSuchMethodError ).

Llegué a la conclusión de que todo lo que necesita hacer es agregar la exclusión anterior a la dependencia de swagger. El proveedor Jackson 2.0 (que depende de JAX-RS 1) parece ser anulado por un proveedor 2.4.1 (que usa la nueva versión). Entonces no necesitamos agregarlo nosotros mismos. Cuando se invalida, parece dejar atrás el jsr311-api.jar . Entonces, si lo excluimos, nadie puede intentar usarlo, que parece ser el problema actual

  com.wordnik swagger-core_2.10 1.3.11   javax.ws.rs jsr311-api    

Estamos utilizando jersey-json 1.9 que tiene una dependencia en jersey-core que también tiene una clase javax.ws.rs.core.Application .

Así que nuestra solución es excluir el jersey-core de jersey-json :

   com.sun.jersey jersey-json 1.9   com.sun.jersey jersey-core    

Puede cambiar la versión de tomcat a 7 y luego se ejecutará sin necesidad de cambiar pom.xml