【问题标题】:NoSuchMethodError on startup in Java Jersey app在 Java Jersey 应用程序中启动时出现 NoSuchMethodError
【发布时间】:2015-04-15 01:43:15
【问题描述】:

尝试在 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)

【问题讨论】:

  • 看起来你的类路径中有不兼容的 jars
  • 我希望你不是在罐子里。
  • 过去 3 天我一直在罐子地狱里。因此没有完成任何工作。
  • 您的版本不匹配。你可以发布你的pom吗?
  • 这是有效的 pom,非常感谢:pastebin.com/NacsWTjz

标签: java maven jersey jax-rs jersey-2.0


【解决方案1】:

问题与“com.sun.jersey:jersey-core:jar:1.18.3”(或任何 1.* 版本)有关,因为旧版本的 Jersey 没有那个“public Map getProperties()”方法。

并且您的依赖项之一使用 Jersey 版本 1(您可以在运行 mvn dependency:tree 并搜索所有使用的 jersey-core 版本中检查它)

我已经解决了删除所有 com.sun.jersey 依赖项(旧 API)并使用新的 org.glassfish.jersey API 的问题

https://mvnrepository.com/artifact/org.glassfish.jersey.core

【讨论】:

    【解决方案2】:

    我们正在使用jersey-json 1.9,它依赖于jersey-core,而jersey-core 也恰好有一个javax.ws.rs.core.Application 类。

    所以我们的解决方法是从 jersey-json 中排除 jersey-core

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

    【讨论】:

      【解决方案3】:

      你可以把tomcat版本改成7就可以运行了,不需要修改pom.xml

      【讨论】:

        【解决方案4】:

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

        这个错误通常意味着你在类路径上有一个 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-apiApplication 没有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>
        

        【讨论】:

        • 在我的情况下,jsr311-api.jarspring-cloud-starter-eureka 一起出现,因此将其排除在外(如 @peeskillet 所示)解决了我的问题。
        • 我使用的版本有点不同:jaxrs-ri-2.28.zip。我可以用 maven 创建一个战争文件。
        猜你喜欢
        • 1970-01-01
        • 2017-07-02
        • 1970-01-01
        • 2012-08-11
        • 2015-11-09
        • 2015-01-04
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        相关资源
        最近更新 更多