You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetty从9.4.41.v20210516升级至11.0.6后无法启动问题求助

Jetty 11.0.6启动失败问题排查与修复

我帮你排查了Jetty从9.4.41升级到11.0.6后启动失败的问题,主要是配置文件里的几个关键不兼容点和结构错误导致的,下面是具体分析和修复方案:

问题原因分析

  • DTD版本不兼容:你当前配置使用的是Jetty 9的DTD声明,Jetty 11已经更新了配置文件的规范,旧DTD会导致解析错误。
  • SslContextFactory类拆分:Jetty 11将原有的org.eclipse.jetty.util.ssl.SslContextFactory拆分为Server和Client两个子类,服务器端必须使用SslContextFactory.Server,否则会初始化失败。
  • 配置结构错误:你把tlsHttpConfig的定义嵌套在了sslContextFactory的配置内部,这是非法的XML结构,Jetty无法正确解析这种嵌套配置。

修复后的完整配置文件

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://www.eclipse.org/jetty/configure_10_0.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
  <Call name="addBean">
    <Arg>
      <New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
    </Arg>
  </Call>
  <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Set name="sendServerVersion"><Property name="jetty.send.server.version" default="false" /></Set>
    <Set name="sendDateHeader"><Property name="jetty.send.date.header" default="false" /></Set>
  </New>
  <!-- 独立定义tlsHttpConfig,不再嵌套在SslContextFactory内 -->
  <New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
    <Arg><Ref refid="httpConfig"/></Arg>
    <Call name="addCustomizer">
      <Arg><New class="org.eclipse.jetty.server.SecureRequestCustomizer"/></Arg>
    </Call>
  </New>
  <!-- 使用Jetty 11要求的SslContextFactory.Server类 -->
  <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory.Server">
    <Set name="KeyStorePath"><SystemProperty name="mcruncher.app.dataDir" default="."/>/<Property name="jetty.keystore" default="temp/keystore.jks"/></Set>
    <Set name="KeyStorePassword">
      <Property name="jetty.keystore.password" default=""/>
    </Set>
    <Set name="EndpointIdentificationAlgorithm"></Set>
    <Set name="IncludeProtocols">
      <Array type="String">
        <Item>TLSv1.2</Item>
      </Array>
    </Set>
    <Set name="IncludeCipherSuites">
      <Array type="String">
        <Item>TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384</Item>
        <Item>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</Item>
      </Array>
    </Set>
  </New>
  <Call id="sslConnector" name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server" /></Arg>
        <Arg name="factories">
          <Array type="org.eclipse.jetty.server.ConnectionFactory">
            <Item>
              <New class="org.eclipse.jetty.server.SslConnectionFactory">
                <Arg name="next">http/1.1</Arg>
                <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg>
              </New>
            </Item>
            <Item>
              <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                <Arg name="config"><Ref refid="tlsHttpConfig"/></Arg>
              </New>
            </Item>
          </Array>
        </Arg>
        <Set name="port"><Property name="jetty.port" default="9090" /></Set>
        <Set name="idleTimeout"><Property name="jetty.idleTimeout" default="30000"/></Set>
        <Set name="soLingerTime"><Property name="jetty.soLingerTime" default="-1"/></Set>
      </New>
    </Arg>
  </Call>
</Configure>

关键修改点说明

  1. 更新DTD声明:将原Jetty 9的DTD替换为Jetty 10/11兼容的DTD,确保配置文件能被正确解析。
  2. 修正SslContextFactory类:将org.eclipse.jetty.util.ssl.SslContextFactory改为org.eclipse.jetty.util.ssl.SslContextFactory.Server,这是Jetty 11服务器端SSL配置的强制要求。
  3. 调整配置结构:把tlsHttpConfig从sslContextFactory内部移出来,作为独立的配置节点,符合Jetty配置文件的结构规范。
  4. 优化路径写法:将路径中的反斜杠\改为正斜杠/,这种写法在Windows和Linux系统下都能正常工作,避免转义问题。

按照这个配置修改后,你的Jetty 11.0.6服务器应该就能正常启动了。

内容的提问来源于stack exchange,提问作者Pitchu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:17:28