Il runtime Java

Il runtime Java è lo stack software responsabile dell'installazione del codice dell'applicazione e delle dipendenze, nonché dell'esecuzione dell'applicazione nell'ambiente flessibile.

Versioni Java

Java 25 uses buildpacks. I buildpack ti aiutano a creare e configurare i container di cui puoi eseguire il deployment Google Cloud.

Per l'elenco completo delle versioni Java supportate e della loro versione Ubuntu corrispondente, consulta la pianificazione del supporto del runtime.

Per utilizzare una versione Java supportata, devi:

  • Installare la versione 420.0.0 o successive di gcloud CLI. Puoi aggiornare i tuoi strumenti CLI eseguendo il gcloud components update comando. Per visualizzare la versione installata, puoi eseguire il gcloud version comando.

  • Per eseguire il deployment utilizzando Maven, devi aggiungere il plug-in Maven di App Engine al file pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.8.1</version>
    </plugin>

    Altre opzioni per il deployment includono il gcloud app deploy comando o il plug-in Gradle di App Engine.

  • Includi le impostazioni runtime_config e operating_system nel file app.yaml per specificare un sistema operativo.

  • (Facoltativo) Puoi specificare una versione del runtime includendo l'impostazione runtime_version nel file app.yaml. Per impostazione predefinita, viene utilizzata l'ultima versione di Java se l'impostazione runtime_version non è specificata.

    Esempi

    • Per specificare Java 25 su Ubuntu 24:

      runtime: java
      env: flex
      
      runtime_config:
          operating_system: "ubuntu24"
          runtime_version: "25"
      
    • Per specificare l'ultima versione Java supportata su Ubuntu 24:

        runtime: java
        env: flex
      
        runtime_config:
            operating_system: "ubuntu24"
      

Versioni precedenti del runtime

Per Java 8, specifica le impostazioni runtime_config e jdk nel file app.yaml.

Java 8 supporta:

  • Il runtime Eclipse Jetty 9 ed esegue Jetty 9 utilizzando Servlet 3.1.

  • Il tuo codice server che rimane in attesa sulla porta 8080 come parte dell'applicazione. Questa funzionalità ti consente di utilizzare framework di microservizi come SparkJava e Spring-Boot.

Esempi

  • Specifica della versione 9 di Jetty (impostazione predefinita / facoltativa):

      runtime_config:
        jdk: openjdk8
        server: jetty9
    
  • Specifica della versione 8 di Java:

      runtime_config:
        jdk: openjdk8
    
  • Esempio di app.yaml per Java 8:

    runtime: java
    env: flex
    
    handlers:
    - url: /.*
      script: this field is required, but ignored

Consulta pom.xml per configurare Maven e build.gradle per configurare Gradle.

File facoltativi

Questi file di configurazione sono facoltativi:

Inserisci questi file nel livello superiore di MyDir. Se utilizzi uno di questi file, devi eseguirne il deployment separatamente con il comando gcloud app deploy.

web.xml è facoltativo ed è necessario solo se non utilizzi le annotazioni Servlet 3.x.

Puoi inserire contenuti web statici, nonché le pagine JavaServer, nella directory webapp/. Jetty 9, che l' ambiente flessibile App Engine utilizza come container Servlet, utilizza Apache Jasper come implementazione JSP predefinita e include le taglib JSTL.

Il file Dockerfile è facoltativo e viene utilizzato per personalizzare il runtime Java.

Attivazione della compressione gzip

Il gestore gzip è incluso in Jetty, ma non è attivato per impostazione predefinita. Per attivare questo modulo, imposta la variabile di ambiente JETTY_MODULES_ENABLE=gzip nel file app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

Utilizzo della guida rapida

Jetty può velocizzare il tempo di avvio dell'applicazione eseguendo la scansione preliminare dei contenuti e generando file di configurazione. Se utilizzi un immagine estesa puoi attivare la guida rapida eseguendo /scripts/jetty/quickstart.sh nel tuo Dockerfile dopo aver aggiunto il file WAR dell'applicazione.

Variabili di ambiente

Puoi impostare le seguenti variabili di ambiente facoltative specifiche per il runtime Java 8/Jetty 9. Puoi anche impostare le variabili di ambiente OpenJDK 8.

Per impostare le variabili di ambiente, utilizza la chiave env_variables nel file app.yaml.

Variabile di ambiente Proprietà Maven Valore/Commento
JETTY_PROPERTIES Elenco separato da virgole di coppie name=value aggiunte a $JETTY_ARGS
JETTY_MODULES_ENABLE Elenco separato da virgole di moduli da attivare aggiungendoli a $JETTY_ARGS
JETTY_MODULES_DISABLE Elenco separato da virgole di moduli da disattivare rimuovendoli da $JETTY_BASE/start.d
JETTY_ARGS Argomenti passati a start.jar di Jetty. Tutti gli argomenti utilizzati per la configurazione personalizzata di Jetty devono essere passati qui.
JAVA_OPTS Argomenti del runtime JVM

Cloud Logging avanzato (beta)

Quando esegui l'ambiente flessibile App Engine, puoi configurare Java Util Logging per inviare i log a Cloud Logging impostando la variabile di ambiente JETTY_ARGS. Ad esempio:

 env_variables:
   JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

Devi fornire un file logging.properties che configuri un LoggingHandler come segue:

handlers=com.google.cloud.logging.LoggingHandler

# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s

Supporto per altri runtime Java

Se devi utilizzare una versione Java non supportata, puoi creare un runtime personalizzato e selezionare un' immagine di base valida con la versione Java di cui hai bisogno.

Per le immagini di base fornite da Google o immagini di base Java Docker, consulta Creare runtime personalizzati.

Organizzare i file

La struttura dell'origine dovrebbe essere simile alla seguente:

MyDir/
  [pom.xml]
  [build.gradle]
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      [Dockerfile]
    java/
      com.example.mycode/
        MyCode.java
    webapp/
      [index.html]
      [jsp.jsp]
      WEB-INF/
        [web.xml]

Test locale

Quando esegui i test nel tuo ambiente locale, puoi utilizzare i servizi emulati Google Cloud anziché i servizi remoti Google Cloud . Puoi utilizzare i seguenti emulatori:

Utilizza il comando gcloud per avviarli prima di eseguire l'app:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

Maven

Aggiungi queste righe al file pom.xml di Maven per aggiungere il plug-in Maven di Jetty 9:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.2.v20170220</version>
</plugin>

Per eseguire l'app nel tuo ambiente locale, utilizza il comando Maven:

mvn jetty:run-exploded

Gradle

Segui le istruzioni riportate in Creare un nuovo progetto Gradle per aggiungere il plug-in Gradle di Gretty a build.gradlee utilizza il comando:

gradle jettyRun

esegui il deployment dell'app

Per inizializzare Google Cloud CLI, esegui:

gcloud init

Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente i file app.yaml e WAR utilizzando:

gcloud app deploy app.yaml

Se utilizzi uno dei file di configurazione facoltativi (index.yaml, cron.yaml e dispatch.yaml), esegui il deployment separatamente con il comando gcloud. Ad esempio:

gcloud app deploy cron.yaml

Maven

Utilizza Maven per eseguire il deployment dell'app:

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

Sostituisci PROJECT_ID con l'ID del tuo Google Cloud progetto. Se il file pom.xml specifica già l'ID progetto, non devi includere la proprietà -Dapp.deploy.projectId nel comando che esegui.

Gradle

Utilizza Gradle per eseguire il deployment dell'app:

gradle appengineDeploy