当前位置: 首页 > 面试题库 >

在Java Jersey应用中启动时出现NoSuchMethodError

黄磊
2023-03-14
问题内容

尝试在Tomcat上启动Jersey应用程序时,出现了一个非常奇怪的错误。相同的代码可在其他计算机上使用。我尝试重新安装tomcat,我所有的maven依赖项,甚至包括Eclipse和Java本身,都没有运气。我觉得好像加载了不良的Jersey版本吗?

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

这是有效的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,则javax.ws.rs.core.Application每个jar中都有一个。但是jsr311-api
Application没有方法getProperties()(因此NoSuchMethodError)。

我得出的结论是,您需要做的就是将上述排除项添加到swagger依赖项中。杰克逊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>


 类似资料:
  • 我正在尝试使用简单的spring启动应用程序。我在ApplicationContext上启动应用程序时遇到问题。 2017-04-26 11:17:31.101警告14528---[main]s.c.a.AnnotationConfigApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂未满足的PendencyExcepti

  • 当我试图从web.xml映射ApplicationContext.xml文件以使用spring ioc时,我的应用程序没有开始在catalina.out中显示以下错误

  • 我无法在使用Appium的设备中启动android应用程序。请在下面找到我的代码: public static void main(string[]args)引发MalformedURLException{

  • 我正试图用Tomcat7运行我的webapp,但我遇到了这个例外: Grave:Excepción arrancando filtro Wicket.Filter java.lang.IllegalStateException:在org.apache.Wicket.Spring.SpringWebApplicationFactory.createApplication(SpringWebAppli

  • 所以我使用IntelliJ,并使用JavaFX构建了我的应用程序。但当我开始我的主要工作时: 我得到以下错误,我不知道这些错误来自哪里。。。在我切换github上的分支并重新设置所有配置之前,一切都很正常。。。 我得到的错误:

  • 我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与