【问题标题】:spring cloud netflix jersey version conflictspring cloud Netflix 球衣版本冲突
【发布时间】:2015-07-01 01:36:09
【问题描述】:

您好,我有一个正在使用的 Spring Boot 应用程序

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
    </dependency>

这取决于 Jersey 版本 2.7。

尝试使用时

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

内部使用 Jersey 版本 1.1,应用程序失败 同一个库的两个不同版本。

有关如何解决此问题的任何建议,我已尝试仅使用 2.7 版,但它们似乎彼此不兼容

谢谢

java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map; 在 org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:303) 在 org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:284) 在 org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:311) 在 org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:168) 在 org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358) 在 javax.servlet.GenericServlet.init(GenericServlet.java:158) 在 io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117) 在 io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:220) 在 io.undertow.servlet.core.ManagedServlet.getServlet(ManagedServlet.java:163) 在 io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:84) 在 io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:82)

【问题讨论】:

  • 您是否尝试同时使用这两个依赖项?
  • 是的,我的整个项目都在使用 JAX-WS 来实现服务,而用于 eureka 的 spring cloud 客户端使用的是相同的,但版本较旧。

标签: java spring jersey spring-boot spring-cloud


【解决方案1】:

我已经通过 spring cloud 获得了 Jersey 2 和 Eureka 客户端的设置,通过指定以下内容来工作:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <excludes>
                <exclude>
                    <groupId>javax.ws.rs</groupId>
                    <artifactId>jsr311-api</artifactId>
                </exclude>
            </excludes>
        </configuration>
    </plugin>

唯一的问题是测试还没有运行。但我们仍在努力寻找问题的完整解决方案。

【讨论】:

    【解决方案2】:

    嗯,这样不好。泽西岛 1 和 2 明显不同。我认为您唯一的选择是将 spring-boot-starter-jersey 和代码删除到 Jersey 1.1。

    可能值得查看 spring-boot-starter-jersey 代码,看看它在自动配置内容时为您提供了什么,这可能对您的编码有所帮助。

    这很不幸,因为 Spring boot 应该为您提供一组精选的、兼容的依赖项,但看起来 spring-cloud-starter-eureka 还没有被折叠到 Spring boot 中,所以您只能使用旧 API。

    【讨论】:

    • 问题是eureka依赖jersey 1。这不是spring boot的问题,也不是依赖管理的问题。
    • 是的,这似乎是唯一的解决方案,但我真的很喜欢最新版本的球衣的简单性,我有一个自定义安全过滤器。还有一个事实是那些旧版本的球衣没有弹簧支撑。
    • 我尝试过 Consul 客户端,但它遇到了同样的问题,因为它使用了一些 Netflix 库。厄运。我找到了一个使用 apache 客户端库的 consul 的 http 客户端,我会试一试,不是 spring cloud 友好但对 spring boot 友好我想应该足够了
    【解决方案3】:

    我设法解决了我的问题,这不是最好的,但它确实有效,我制作了该库的剥离版本,将 jersey 客户端替换为 cxf 库,它运行良好。

    https://github.com/MicroIdeas/service-registry/tree/master/src/main/java/co/microideas/framework

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,直到我将 spring-boot-starter-jersey 移到依赖项的顶部。这似乎可以完全治愈它。

      【讨论】:

        猜你喜欢
        • 2015-02-23
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 2016-12-08
        • 2015-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        相关资源
        最近更新 更多