Memaketkan ulang file WAR ke dalam file JAR

Jika bermigrasi ke versi Java terbaru yang didukung dan aplikasi Anda tidak menggunakan layanan paket lama, Anda harus memaketkan ulang aplikasi web Java 8 App Engine Anda menjadi file JAR yang dapat dieksekusi.

Aplikasi Anda harus memiliki class Main yang memulai server web yang merespons permintaan HTTP di port 8080, yang mungkin ditentukan oleh variabel lingkungan PORT.

Contoh:

import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

public class Main {

  public static void main(String[] args) throws IOException {
    // Create an instance of HttpServer bound to port defined by the 
    // PORT environment variable when present, otherwise on 8080.
    int port = Integer.parseInt(System.getenv().getOrDefault("PORT", "8080"));
    HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);

    // Set root URI path.
    server.createContext("/", (var t) -> {
      byte[] response = "Hello World from Google App Engine Java 11.".getBytes();
      t.sendResponseHeaders(200, response.length);
      try (OutputStream os = t.getResponseBody()) {
        os.write(response);
      }
    });

    // Start the server.
    server.start();
  }
}

Contoh migrasi WAR (Java 11)

Petunjuk berikut menunjukkan cara memaketkan ulang aplikasi hello-world Java 8 App Engine sebagai JAR untuk dijalankan di runtime Java 11.

Migrasi menggunakan artefak appengine-simple-jetty-main. Tindakan ini akan menyediakan class Main dengan server web Jetty sederhana yang memuat file WAR dan memaketkan aplikasi Anda ke dalam file JAR yang dapat dieksekusi:

  1. Clone artefak Jetty Server Tersemat ke komputer lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples
    

    Atau, Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya.

  2. Ubah ke direktori yang berisi kode contoh:

    cd java-docs-samples/appengine-java11/appengine-simple-jetty-main/
    
  3. Instal dependensi secara lokal:

    mvn install
    
  4. Tambahkan kode berikut ke file pom.xml project Anda:

    • appengine-simple-jetty-main dependensi:
      <dependency>
        <groupId>com.example.appengine</groupId>
        <artifactId>simple-jetty-main</artifactId>
        <version>1</version>
        <scope>provided</scope>
      </dependency>
    • Plugin maven-dependency:
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.6.1</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>
                ${project.build.directory}/appengine-staging
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin>
      App Engine men-deploy file yang berada di direktori ${build.directory}/appengine-staging. Dengan menambahkan plugin maven-dependency ke build Anda, App Engine akan menginstal dependensi yang Anda tentukan ke folder yang benar.
  5. Buat elemen entrypoint dalam file app.yaml untuk memanggil objek appengine-simple-jetty-main dan meneruskan file WAR sebagai argumen. Misalnya, lihat file app.yaml contoh helloworld-servlet:

    runtime: java11
    entrypoint: 'java -cp "*" com.example.appengine.jetty.Main helloworld.war'
  6. Untuk menjalankan aplikasi Anda secara lokal:

    1. Paketkan aplikasi Anda:

      mvn clean package
      
    2. Mulai server dengan file WAR Anda sebagai argumen.

      Misalnya, Anda dapat memulai server dalam contoh helloworld-servlet dengan menjalankan perintah berikut dari folder java-docs-samples/appengine-java11/appengine-simple-jetty-main/ Anda:

      mvn exec:java -Dexec.args="../helloworld-java8/target/helloworld.war"
      
    3. Di browser web, masukkan alamat berikut:

      http://localhost:8080

  7. Untuk men-deploy aplikasi Anda:

    alat gcloud

    gcloud app deploy

    Plugin Maven

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    Ganti PROJECT_ID dengan ID project Google Cloud Anda. Jika file pom.xml Anda sudah menentukan project ID , Anda tidak perlu menyertakan properti -Dapp.deploy.projectId dalam perintah yang Anda jalankan.