升级现有应用

将应用升级到受支持的最新运行时版本,以继续接收安全更新并有资格获得技术支持。

升级现有应用的过程取决于应用使用的运行时版本:

  • Java 8:将应用迁移到受支持的最新 Java 版本。Java 8 已于 2024 年 1 月 31 日达到支持终止期限,并将于 2026 年 1 月 31 日弃用。弃用后,您将无法部署 Java 8 应用,即使您的组织之前曾使用组织政策重新启用旧版运行时的部署也是如此。现有的 Java 8 应用在弃用日期之后将继续运行并接收流量。

  • Java 11:将应用升级到受支持的最新 Java 版本。Java 11 已于 2024 年 10 月 31 日达到支持终止期限,并将于 2025 年 10 月 31 日弃用。弃用后,您将无法部署 Java 11 应用。现有的 Java 11 应用在弃用日期之后将继续运行并接收流量。

  • 受支持的第二代运行时(Java 17 和 Java 21)

    App Engine 支持第二代 Java 运行时版本,例如 Java 17 和 Java 21。如需升级到 Java 25(预览版),请执行以下操作:

    • 通过指定您希望应用运行的 Java 版本来更新 app.yaml 文件。例如:

        runtime: javaVERSION
      

      其中 VERSIONMAJOR 版本号。 例如,如需使用最新的 Java 版本 Java 25(预览版),请指定 25。如需了解详情,请参阅 Java 运行时概览

    • 如果您使用的是旧版捆绑服务,请升级应用以在以下任一环境中运行:

      • Java Enterprise Edition 11 (E11):EE 11 不支持 javax.servlet.* API,需要您更新应用和第三方依赖项以使用较新的 Java 制品,例如 Jakarta 命名空间。Java 25(预览版)默认在 EE 11 上运行,不支持 EE 10。

      • Java Enterprise Edition 8 (EE 8):Java EE 8 允许您使用 javax.servlet.* API,但您必须对 appengine-web.xml 文件进行细微的配置更改。

升级到受支持的 Java 版本以使用旧版捆绑服务

Java 运行时兼容性

请参阅下表,了解哪些 Java 版本与您的 servlet 版本兼容。如需详细了解入口点功能、系统属性配置、生成的 Jetty 支持和兼容的 EE 版本,请参阅入口点功能

Enterprise Edition (EE) Java 版本 Servlet 兼容性
EE7 11 2.5 或 3.1 社区不支持 EE7。Java 11 已达到停止支持期限。我们建议您升级应用以使用最新版本的 Java
EE7 17 2.5 或更高版本 EE7 没有社区支持。我们建议您升级应用以使用 EE 8 及更高版本。
EE 8 17/21/25(预览版) 2.5 及更高版本 Java EE 8 与 Java EE6 及更高版本向后兼容。如需了解详情,请参阅在兼容的 Enterprise Edition (EE) 版本上升级 Java
EE 10 17/21 6.0(默认,建议)。Java 21 默认配置为运行 EE 10。 如需使用 Java EE 10,请更新应用 servlet 和依赖项以包含 Jakarta 命名空间。如需了解详情,请参阅在兼容的 Enterprise Edition (EE) 版本上升级 Java。您无法在 EE10 上使用 Java 25(预览版)。
EE 11 25 6.1(默认,建议)。Java 25(预览版)配置为默认运行 EE 11。 如需使用 Java EE 11,请更新应用 servlet 和依赖项以包含 Jakarta 命名空间。如需了解详情,请参阅在兼容的 Enterprise Edition (EE) 版本上升级 Java

在兼容的 Enterprise Edition (EE) 版本上升级 Java

如需在 Enterprise Edition 11 (EE 11) 上使用 Java 25(预览版),或在 Enterprise Edition 10 (EE 10) 上使用 Java 21,请升级 Maven 和 Gradle 文件中的应用 servlet 和依赖项以包含 Jakarta 命名空间:

Java 25(预览版,EE 11)

如需在 Enterprise Edition 11 (EE 11) 上使用 Java 25(预览版),请按以下步骤操作:

  1. web.xml 配置文件中的版本号更改为 version=6.1。例如:

        <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd"
          version="6.1">
          ...
        </web-app>
    
  2. 将应用 servlet 和依赖项从 javax.servlet.* 重命名为 jakarta.servlet.*

        import jakarta.servlet.ServletException;
        import jakarta.servlet.annotation.WebServlet;
        import jakarta.servlet.http.Cookie;
        import jakarta.servlet.http.HttpServlet;
        import jakarta.servlet.http.HttpServletRequest;
        import jakarta.servlet.http.HttpServletResponse;
    
        @WebServlet(name = "viewer", urlPatterns = {"/view"})
        public class MyServlet extends HttpServlet {
        ......
    
  3. 根据 Jakarta 命名空间,将其余的应用第三方依赖项更新为较新的 Java 制品。

  4. appengine-web.xml 文件中添加以下系统属性:

    <?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>java25</runtime>
        <system-properties>
          <property name="appengine.use.EE11" value="true"/>
        </system-properties>
        <app-engine-apis>true</app-engine-apis>
    </appengine-web-app>
    
  5. 可选:Java 25 支持虚拟线程。如需启用虚拟线程,请在 appengine-web.xml 文件的 system-properties 标记内添加 appengine.use.virtualthreads 属性。

Java 21 (EE 10)

如需在 Enterprise Edition 10 (EE 10) 上使用 Java 21,请按以下步骤操作:

  1. web.xml 配置文件中的版本号更改为 version=6.0。例如:

        <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
          version="6.0">
          ...
        </web-app>
    
  2. 将应用 servlet 和依赖项从 javax.servlet.* 重命名为 jakarta.servlet.*

        import jakarta.servlet.ServletException;
        import jakarta.servlet.annotation.WebServlet;
        import jakarta.servlet.http.Cookie;
        import jakarta.servlet.http.HttpServlet;
        import jakarta.servlet.http.HttpServletRequest;
        import jakarta.servlet.http.HttpServletResponse;
    
        @WebServlet(name = "viewer", urlPatterns = {"/view"})
        public class MyServlet extends HttpServlet {
        ......
    
  3. 根据 Jakarta 命名空间,将其余的应用第三方依赖项更新为较新的 Java 制品。

  4. appengine-web.xml 文件中添加以下系统属性:

    <?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>java21</runtime> <!-- or java17 -->
        <system-properties>
          <property name="appengine.use.EE10" value="true"/>
        </system-properties>
        <app-engine-apis>true</app-engine-apis>
    </appengine-web-app>
    
  5. 可选:Java 21 支持虚拟线程。如需启用虚拟线程,请在 appengine-web.xml 文件的 system-properties 标记内添加 appengine.use.virtualthreads 属性。

Java 17 及更高版本 (EE 8)

在 Java EE 8 上使用 javax.servlet.* API,而无需对应用配置进行重大更改。EE 8 会为 Java EE 6 及更高版本提供向后兼容性。

如需在 Java EE 8 上运行应用,请在 appengine-web.xml 文件中声明新的 system-properties 标记并使用非默认 app.engine.use.EE8 配置:

  <?xml version="1.0" encoding="utf-8"?>
  <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java17</runtime>
      <system-properties>
        <property name="appengine.use.EE8" value="true"/>
      </system-properties>
      <app-engine-apis>true</app-engine-apis>
  </appengine-web-app>

可选:Java 21 版及更高版本支持虚拟线程。如需启用虚拟线程,请在 system-properties 标记中添加 appengine.use.virtualthreads 属性。示例:<property name="appengine.use.virtualthreads" value="true"/>