NoSuchMethodError au démarrage dans L'application Java Jersey

J'ai eu une erreur très étrange en essayant de démarrer une application Jersey sur Tomcat. Le même code fonctionne sur d'autres ordinateurs. J'ai essayé de réinstaller tomcat, toutes mes dépendances maven, même Eclipse et Java lui-même, pas de chance. Il semble qu'une mauvaise version de Jersey est en cours de chargement, je pense?

Tous les pointeurs dans la bonne direction seront appréciés.

Voici le pom efficace: http://pastebin.com/NacsWTjz

Et le pom réel: 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.<init>(ApplicationHandler.java:304)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285)
    at org.glassfish.jersey.servlet.WebComponent.<init>(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)
26
demandé sur Paul Samsotha 2015-02-14 00:51:03

3 réponses

Remarque: veuillez consulter les commentaires ci-dessus pour plus de discussion et de conseils.

Cette erreur habituelle signifie que vous avez à la fois un jar JAX-RS 1 et JAX-RS 2 sur le classpath. Jersey 2 utilise JAX-RS 2 (javax.ws.rs-api-2.0.1.jar), mais si vous avez aussi le jsr311-api.jar, qui est JAX-RS 1, Il y a un javax.ws.rs.core.Application dans chaque pot. Mais l'jsr311-api Application n'ont pas la méthode getProperties() (d'où NoSuchMethodError).

Je suis arrivé à la conclusion que tout ce que vous devez faire est d'ajouter l'exclusion ci-dessus à la dépendance swagger. Le Jackson 2.0 le fournisseur (qui dépend de JAX-RS 1) semble être remplacé par un fournisseur 2.4.1 (qui utilise la nouvelle version). Nous n'avons donc pas besoin de l'Ajouter nous-mêmes. Quand il est remplacé, il semble laisser derrière lui le jsr311-api.jar. Donc, si nous l'excluons, personne ne peut essayer de l'utiliser, ce qui semble être le problème actuel

<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-core_2.10</artifactId>
    <version>1.3.11</version>
    <exclusions>
        <exclusion>
            <groupId>javax.ws.rs</groupId>
            <artifactId>jsr311-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
62
répondu Paul Samsotha 2015-07-08 03:02:14

Nous utilisons jersey-json 1.9 qui a une dépendance sur jersey-core qui a aussi une classe javax.ws.rs.core.Application.

Donc, notre solution est d'exclure le jersey-core de jersey-json:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9</version>
        <exclusions>
            <exclusion>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
0
répondu Leon li 2018-06-12 15:27:55

Vous pouvez changer la version de tomcat à 7 alors il ne sera pas nécessaire de changer pom.xml

-2
répondu Koshan Imanga 2017-11-27 07:20:19