【问题标题】:org.eclipse.jetty.util.ssl.SslContextFactory$Client ClassNotFoundException upgrading to Jetty Server 9.4.16org.eclipse.jetty.util.ssl.SslContextFactory$Client ClassNotFoundException 升级到 Jetty Server 9.4.16
【发布时间】:2019-08-08 13:43:24
【问题描述】:

我有一个工作应用程序一直在使用码头服务器版本9.4.15.v20190215。由于漏洞扫描发现 jetty-server 依赖项存在问题,我考虑升级我的应用程序以使用 jetty-server 9.4.19-v20190610,这是我撰写本文时的最新版本。

我尝试再次编译应用程序,但在启动过程中出现此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/ssl/SslContextFactory$Client
    at org.eclipse.jetty.websocket.client.HttpClientProvider.get(HttpClientProvider.java:49)
    at org.eclipse.jetty.websocket.client.WebSocketClient.<init>(WebSocketClient.java:261)
    at org.eclipse.jetty.websocket.jsr356.ClientContainer.<init>(ClientContainer.java:140)
    at org.eclipse.jetty.websocket.jsr356.server.ServerContainer.<init>(ServerContainer.java:94)
    at org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(WebSocketServerContainerInitializer.java:152)
    at it.kahoot.merlin.jetty.JettyServer.main(JettyServer.java:53)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.ssl.SslContextFactory$Client
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

我知道课程 org.eclipse.jetty.util.ssl.SslContextFactory$Client 已找不到了。

我该怎么做?

【问题讨论】:

    标签: java websocket embedded-jetty jetty-9


    【解决方案1】:

    通过将 jetty-server 版本追溯到导致此问题的第一个版本,我发现它是 jetty-server 版本 9.4.16.v20190411,其发行说明中提到以下内容:

    jetty-9.4.16.v20190411 - 11 April 2019
     ...
     + 3464 Split SslContextFactory into Client and Server
     ...
    

    鉴于类名,我想我需要将 jetty-util 添加到我的依赖项 (pom.xml),所以我这样做了:

    <!-- pom.xml -->
    ...
    <properties>
      <jetty.version>9.4.19.v20190610</jetty.version>
    </properties>
    
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    
    <!-- Needed for the SSLContextFactory$Client class -->
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-util</artifactId>
      <version>${jetty.version}</version>
    </dependency>
    

    编译和启动现在可以再次使用最新的 Jetty。

    【讨论】:

    • 问题 #3464 确实引入了新的 SslContextFactory.Client 和 SslContextFactory.Server 类,但没有强制要求。不知何故,您对 jetty-server 的依赖并没有引入正确版本的 jetty-util。这很可疑,因为这可能意味着您有一些其他依赖项需要旧版本的 jetty-util。像您正在做的那样强制使用更新的 jetty-util 可能会破坏这种其他依赖关系。
    • 谢谢@JoakimErdfelt。查看maven依赖树,jetty-server依赖似乎只是拉动jetty-http和jetty-io(相同版本)。
    猜你喜欢
    • 2018-03-02
    • 2012-05-16
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多