java - 在 Java Jersey 应用程序中启动时出现 NoSuchMethodError

标签 java maven jersey jax-rs jersey-2.0

尝试在 Tomcat 上启动 Jersey 应用程序时,我遇到了一个非常奇怪的错误。相同的代码适用于其他计算机。我尝试重新安装 tomcat,我的所有 maven 依赖项,甚至 Eclipse 和 Java 本身,但没有运气。好像正在加载一个糟糕的泽西版本,我想?

任何指向正确方向的指针将不胜感激。

这是有效的 pom:http://pastebin.com/NacsWTjz

实际的 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.<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)

最佳答案

注意:请参阅上面的评论以获得进一步的讨论和提示。

这个错误通常意味着你在类路径上有一个 JAX-RS 1 和 JAX-RS 2 jar。 Jersey 2 使用 JAX-RS 2 (javax.ws.rs-api-2.0.1.jar),但如果你也有 jsr311-api.jar,是 JAX-RS 1,每个 jar 中都有一个 javax.ws.rs.core.Application。但是 jsr311-api Application 没有方法 getProperties() (因此 NoSuchMethodError)。

我得出的结论是,您需要做的就是将上述排除项添加到 swagger 依赖项中。 Jackson 2.0 提供程序(依赖于 JAX-RS 1)似乎被 2.4.1 提供程序(使用新版本)覆盖。所以我们不需要自己添加。当它被覆盖时,它似乎留下了 jsr311-api.jar。所以如果我们排除它,没有人可以尝试使用它,这看起来是当前的问题

<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>

关于java - 在 Java Jersey 应用程序中启动时出现 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509370/

相关文章:

java - 首先 RandomAccessFile 初始化缓慢,随后快速

java - eclipse 中带有星号图标的方法是什么?

java - 访问 Web 服务时出现 NoClassDefFoundError

maven - 如何在文件名中没有版本的情况下将依赖项包含到 EAR 中

java - 在 Tomcat+Jersey 中没有 web.xml 的情况下在容器启动时加载 webapp?

Java HttpURLConnection : Content Length computation

java - Maven : how to create project with no propagating deps?

Maven 传递依赖混淆

java - 使用 Jersey REST 维护事务流

java - Jersey HK2 注入(inject)手动创建的对象