升級現有應用程式

請將應用程式升級至最新支援的執行階段版本,以繼續接收安全性更新,並享有技術支援服務。

升級現有應用程式的程序取決於應用程式使用的執行階段版本:

  • 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 版 (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 檔案中,使用非預設的 app.engine.use.EE8 設定宣告新的 system-properties 標記:

  <?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"/>