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

Java 11下App Engine本地服务器mvn appengine:run运行报错求助

问题分析与解决方案

核心问题

出现java.lang.NoClassDefFoundError: jakarta/servlet/Filter错误的原因是:

  1. 项目混用了Jakarta EE 9+依赖(如Jersey 3.x)和旧版Java EE 8依赖(如javax.ws.rs、Objectify 5.x),导致Servlet API包路径冲突(jakarta.servlet vs javax.servlet)。
  2. App Engine SDK和Maven插件版本过旧,不支持Jakarta EE 9+规范。
  3. 存在重复的JAXB依赖,引发类路径混乱。

具体修复步骤

1. 更新App Engine相关依赖与插件

将旧版SDK和插件替换为支持Jakarta EE 9+的版本:

<!-- App Engine SDK -->
<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-1.0-sdk</artifactId>
    <version>2.4.0</version>
</dependency>

<!-- App Engine Maven Plugin -->
<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>2.5.0</version>
    <configuration>
        <projectId>cardgamesserver</projectId>
        <version>1</version>
        <cloudSdkVersion>429.0.0</cloudSdkVersion>
        <gcloudMode>beta</gcloudMode>
    </configuration>
</plugin>

2. 统一Jakarta EE依赖

替换旧版Java EE依赖为Jakarta EE对应版本:

  • 移除javax.ws.rs:javax.ws.rs-api,添加Jakarta版本:
<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>3.1.1</version>
</dependency>
  • 清理重复的JAXB依赖,仅保留Jakarta规范和GlassFish实现:
<!-- 保留这两个即可 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>4.0.2</version>
</dependency>
<!-- 移除以下依赖 -->
<!-- <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>4.0.2</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>4.0.2</version>
</dependency> -->

3. 更新Objectify至Jakarta兼容版本

旧版Objectify 5.x使用javax.servlet,需替换为支持jakarta.servlet的版本:

<dependency>
    <groupId>com.googlecode.objectify</groupId>
    <artifactId>objectify</artifactId>
    <version>7.1.0</version>
</dependency>

4. 更新Maven编译与打包插件

适配Java 11的最新插件版本:

<!-- Maven Compiler Plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <source>11</source>
        <target>11</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

<!-- Maven War Plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.3.2</version>
</plugin>

验证修复

执行以下命令清理并重新构建项目:

mvn clean install
mvn appengine:run

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 23:32:03