您必须将应用升级到受支持的最新运行时版本,才能继续接收安全更新并有资格获得技术支持。
升级现有应用的过程取决于应用当前使用的运行时版本:
Java 8:您必须将应用迁移到受支持的最新 Java 版本。Java 8 已于 2024 年 1 月 31 日达到支持终止期限。现有的 Java 8 应用将继续运行并接收流量。但是,您无法部署新应用或更新使用支持终止日期之后的运行时的现有应用。
Java 第二代运行时(支持终止后):如需升级到受支持的 Java 版本,请执行以下操作:
通过指定您希望应用运行的 Java 版本来更新
app.yaml
文件。例如:runtime: javaVERSION
其中 VERSION 是
MAJOR
版本号。例如,如需使用最新的 Java 版本 Java 21,请指定21
。如需了解详情,请参阅 Java 运行时概览。如果您使用的是旧版捆绑服务,则必须升级应用以在以下任一环境中运行:
Java Enterprise Edition 10(EE10 - 默认,推荐使用):Java EE10 不支持
javax.servlet.*
API,需要您更新应用和第三方依赖项以使用较新的 Java 工件,例如Jakarta
命名空间。Java Enterprise Edition 8 (EE8):Java EE8 允许您使用
javax.servlet.*
API,但您必须对appengine-web.xml
文件进行细微的配置更改。如需了解所有选项,请参阅升级到适用于旧版捆绑服务的 Java 21。
Java 17:
App Engine 支持此版本。如需继续升级到最新的支持版本,请执行以下操作:
通过指定您希望应用运行的 Java 版本来更新
app.yaml
文件。例如:runtime: javaVERSION
其中 VERSION 是
MAJOR
版本号。例如,如需使用最新的 Java 版本 Java 21,请指定21
。如需了解详情,请参阅 Java 运行时概览。如果您使用的是旧版捆绑服务,则必须升级应用以在以下任一环境中运行:
Java Enterprise Edition 10(EE10 - 默认,推荐使用):Java EE10 不支持
javax.servlet.*
API,需要您更新应用和第三方依赖项以使用较新的 Java 工件,例如Jakarta
命名空间。Java Enterprise Edition 8 (EE8):Java EE8 允许您使用
javax.servlet.*
API,但您必须对appengine-web.xml
文件进行细微的配置更改。
如需了解所有选项,请参阅升级到适用于旧版捆绑服务的 Java 21。
升级到适用于旧版捆绑服务的 Java 21
Java 运行时兼容性
请参阅下表,了解哪些 Java 版本与您的 Jetty 和 servlet 版本兼容:
企业版 (EE) | Jetty 版本 | Java 版本 | Servlet | 兼容性 |
---|---|---|---|---|
EE7 | 9.4 | 11 | 2.5 或 3.1 | |
EE7 | 9.4 | 17 | 2.5 或 3.1 | |
EE8 | 12 | 21 | 2.5 及更高版本 | Java EE8 与 Java EE6 及更高版本向后兼容。如需了解详情,请参阅在 EE8 上升级到 Java 21。 |
EE10 | 12 | 21 | 6.0(推荐)。Java 21 默认配置为运行 EE10。 | 如需使用 Java EE10,您必须更新应用 servlet 和依赖项以包含 Jakarta 命名空间。如需了解详情,请参阅在 EE10 上升级到 Java 21。 |
在 EE10 上升级到 Java 21
如需在 Enterprise Edition 10 (EE10) 上使用 Java 21,您必须升级 Maven 和 Gradle 文件中的应用 servlet 和依赖项以包含 Jakarta
命名空间:
将
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>
将应用 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 { ......
根据
Jakarta
命名空间,将其余的应用第三方依赖项更新为较新的 Java 工件。可选:Java 21 支持虚拟线程。如需启用虚拟线程,请在
appengine-web.xml
文件的system-properties
标记内添加appengine.use.virtualthreads
属性。
在 EE8 上升级到 Java 21
您可以继续在 Java EE8 上使用 javax.servlet.*
API,而无需对应用配置进行重大更改,因为 Jetty 12 会为 Java EE6 及更高版本提供向后兼容性。如需在 Java EE8 上运行应用,您必须在 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>java21</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"/>