NoSuchMethodError при запуске в приложении Java Jersey
У меня возникла очень странная ошибка при попытке запустить приложение «Джерси» на Tomcat. Тот же код работает на других компьютерах. Я попытался переустановить tomcat, все мои зависимости maven, даже Eclipse и Java, не повезло. Кажется, что плохая версия Джерси загружается, я думаю?
Любые указатели в правильном направлении будут оценены.
Вот эффективный pom: http://pastebin.com/NacsWTjz
- Что такое Maven Snapshot и зачем нам это нужно?
- Как сказать Maven игнорировать ошибки SSL (и доверять всем сертификатам)?
- Maven "определяет среду исполнения J2SE-1.5", хотя я изменил ее на 1.7
- Добавление локальных файлов .aar в мою структуру gradleиента
- Инспекция IntelliJ дает «Не удается разрешить символ», но все еще компилирует код
И фактический pom: 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)
- Ошибка компиляции Maven: (используйте оператор 7 или выше для включения оператора бриллианта)
- Почему Maven загружает maven-metadata.xml каждый раз?
- java.lang.NoClassDefFoundError: org / apache / spark / Logging
- Ошибка Maven: Возможно, вы работаете на JRE, а не в JDK?
- java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter при запуске приложения Simple Struts2
- Как загрузить файл из папки ресурсов?
- Какова цель свойства classификатора зависимостей зависимостей Mavens?
- SLF4J: Не удалось загрузить class «org.slf4j.impl.StaticLoggerBinder». ошибка
Примечание. Пожалуйста, см. Выше комментарии для дальнейшего обсуждения и советов.
Эта обычная ошибка означает, что у вас есть как JAX-RS 1, так и JAX-RS 2 на пути к classам. Джерси 2 использует JAX-RS 2 ( javax.ws.rs-api-2.0.1.jar
), но если у вас также есть jsr311-api.jar
, то есть JAX-RS 1, есть javax.ws.rs.core.Application
в каждой банке. Но приложение jsr311-api
не имеет метода getProperties()
(следовательно, NoSuchMethodError
).
Я пришел к выводу, что все, что вам нужно сделать, это добавить исключение выше в зависимость от чванства. Поставщик Jackson 2.0 (который зависит от JAX-RS 1), по-видимому, переопределяется поставщиком 2.4.1 (который использует новую версию). Поэтому нам не нужно добавлять его сами. Когда он переопределен, он, кажется, оставляет jsr311-api.jar
. Поэтому, если мы исключаем его, никто не может попытаться использовать его, что выглядит текущей проблемой
com.wordnik swagger-core_2.10 1.3.11 javax.ws.rs jsr311-api
Мы используем jersey-json
1.9, который имеет зависимость от jersey-core
который также имеет class javax.ws.rs.core.Application
.
Поэтому наше исправление заключается в исключении джерси-ядра из jersey-json
:
com.sun.jersey jersey-json 1.9 com.sun.jersey jersey-core
Вы можете изменить версию tomcat на 7, тогда вам не придется менять pom.xml