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

OpenJDK11+GWT SDK2.8.2+Jetty9部署Web应用遇503错误求助

排查GWT 2.8.2 + OpenJDK 11 + Jetty 9 出现503服务不可用的问题

我之前也碰到过类似的情况——虽然GWT 2.8.2官方宣称兼容JDK11,但实际和Jetty搭配时总会有一些隐藏的兼容性坑。结合你的情况(JDK8下正常、无编译错误),可以按下面的步骤逐一排查:

1. 先确认GWT 2.8.2对JDK11的实际兼容边界

别完全相信官方文档的“兼容”二字,GWT 2.8.2是JDK11刚发布不久后推出的版本,对JPMS(Java模块系统)的支持很有限:

  • 如果你的项目用了--module-path来管理依赖,建议暂时切换回传统的类路径模式试试,模块系统很可能会干扰GWT的类加载逻辑。
  • 检查项目里有没有用到JDK11新增的API,GWT编译器可能能通过编译,但Jetty运行时的类加载器找不到这些类,直接导致服务启动失败。

2. 检查Jetty 9的版本是否适配JDK11

Jetty 9.x对JDK11的支持是从Jetty 9.4.14才开始的,如果你的Jetty版本比这个旧,大概率会出问题。赶紧升级到Jetty 9.4.x的最新稳定版(比如9.4.52.v20230823),旧版本的Jetty在JDK11下的类加载和初始化逻辑有不少bug。

3. 给JVM加些绕开模块化限制的参数

JDK9+的模块化机制会限制GWT Dev Mode的反射调用,必须手动开放权限。在你的Jetty运行配置里添加这些JVM参数:

--add-modules java.se.ee
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.util.concurrent=ALL-UNNAMED
--add-opens java.rmi/sun.rmi.transport=ALL-UNNAMED

这些参数能解决大部分因模块化导致的类访问受限问题。

4. 检查GWT模块配置里的坑

打开你的.gwt.xml文件仔细看看:

  • 有没有引用JDK11已经移除的模块?比如javax.xml.bind、javax.annotation这些,JDK11不再自带,你需要手动添加jaxb-api、jaxb-impl这类依赖到项目里。
  • 确认<inherits>标签里的第三方GWT模块是否适配JDK11,有些老的第三方模块还没更新,会在启动时抛出初始化异常。

5. 别忽略Jetty的详细日志

默认的503页面完全没信息量,必须看Jetty的调试日志才能找到根本原因:

  • 在Eclipse的Jetty运行配置里,添加VM参数:-Dorg.eclipse.jetty.LEVEL=DEBUG
  • 启动后看控制台输出,找启动过程中的ClassNotFoundException、NoClassDefFoundError这类异常,这些才是导致Jetty无法部署应用、返回503的真凶。

6. 核对Maven/Eclipse的构建配置

Maven项目

确保maven-compiler-plugin和gwt-maven-plugin的配置适配JDK11:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <compilerArgs>
            <arg>--add-modules=java.se.ee</arg>
        </compilerArgs>
    </configuration>
</plugin>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.8.2</version>
    <configuration>
        <sourceLevel>11</sourceLevel>
        <!-- 其他配置 -->
    </configuration>
</plugin>

Eclipse原生项目

  • 确认项目的Java Build Path里的JRE是OpenJDK11,不是JDK8或者其他版本。
  • 检查编译输出目录有没有权限问题,有时候Eclipse生成的class文件读不到也会导致启动失败。
  • 把Eclipse的GWT插件更新到最新版本,旧插件对JDK11的支持很差。

7. 用最小项目排查法定位问题

如果上面的步骤都没解决,就创建一个最简单的GWT Hello World项目,用同样的JDK11+Jetty9+GWT2.8.2配置运行:

  • 如果最小项目正常,说明你的原项目里有特定的依赖或配置导致问题,逐步添加原项目的依赖、模块配置,每次添加后运行,直到复现503,就能定位到具体问题点了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:22:41