El tiempo de ejecución de Java es la pila de software encargada de instalar el código de tu aplicación y sus dependencias, y de ejecutar esa aplicación en el entorno flexible.
Versiones de Java
Java 21 usa buildpacks, que te ayudan a crear y configurar contenedores que puedes desplegar en Google Cloud.
Para ver la lista completa de las versiones de Java admitidas y sus versiones de Ubuntu correspondientes, consulta la programación de asistencia del tiempo de ejecución.
Para usar una versión de Java compatible, debes hacer lo siguiente:
Instala la versión 420.0.0 o posterior de gcloud CLI. Puedes actualizar las herramientas de la CLI ejecutando el comando
gcloud components update. Para ver la versión instalada, puedes ejecutar el comandogcloud version.Para desplegar tu aplicación con Maven, debes añadir el complemento Maven de App Engine a tu
pom.xml:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.8.1</version> </plugin>Otras opciones de implementación son el comando
gcloud app deployo el plugin Gradle de App Engine.Incluye los ajustes
runtime_configyoperating_systemen el archivoapp.yamlpara especificar un sistema operativo.También puedes especificar una versión del tiempo de ejecución incluyendo el ajuste
runtime_versionen el archivoapp.yaml. De forma predeterminada, se usa la versión más reciente de Java si no se especifica el ajusteruntime_version.Ejemplos
Para especificar Java 21 en Ubuntu 22, haz lo siguiente:
runtime: java env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "21"Para especificar la versión de Java más reciente compatible en Ubuntu 22, haz lo siguiente:
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
Versiones anteriores del entorno de ejecución
En Java 8, especifica los ajustes runtime_config y jdk en el archivo app.yaml.
Java 8 admite lo siguiente:
El tiempo de ejecución de Eclipse Jetty 9 y ejecuta Jetty 9 con Servlet 3.1.
El código de tu servidor, que escucha en el puerto 8080 como parte de tu aplicación. Esta función te permite usar frameworks de microservicios como SparkJava y Spring Boot.
Ejemplos
Especificar la versión 9 de Jetty (opcional o predeterminada):
runtime_config: jdk: openjdk8 server: jetty9Especificar la versión 8 de Java:
runtime_config: jdk: openjdk8Ejemplo
app.yamlpara Java 8:
Consulta pom.xml
para configurar Maven y build.gradle
para configurar Gradle.
Archivos opcionales
Estos archivos de configuración son opcionales:
Coloca estos archivos en el nivel superior de MyDir. Si usas alguno de estos archivos, debes implementarlos por separado con el comando gcloud app deploy.
web.xml
es opcional y solo es necesario si no usas anotaciones de Servlet 3.x.
Puede colocar contenido web estático, así como sus páginas JavaServer, en el directorio webapp/.
Jetty 9, que el entorno flexible de App Engine usa como contenedor de servlets, usa
Apache Jasper
como implementación predeterminada de JSP e incluye bibliotecas de etiquetas JSTL.
El archivo Dockerfile es opcional y se usa para personalizar el tiempo de ejecución de Java.
Habilitar la compresión gzip
El controlador gzip se incluye con Jetty, pero no está activado de forma predeterminada. Para activar este módulo, define la variable de entorno JETTY_MODULES_ENABLE=gzip en el archivo app.yaml:
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
Usar la guía de inicio rápido
Jetty puede acelerar
el tiempo de inicio de tu aplicación preanalizando su contenido y generando archivos de configuración.
Si usas una imagen ampliada, puedes activar la guía de inicio rápido ejecutando /scripts/jetty/quickstart.sh en tu Dockerfile, después de añadir el archivo WAR de la aplicación.
Variables de entorno
Puedes definir las siguientes variables de entorno opcionales que son específicas del tiempo de ejecución de Java 8/Jetty 9. También puedes definir variables de entorno de OpenJDK 8.
Para definir variables de entorno, usa la clave env_variables en el archivo app.yaml.
| Variable de entorno | Maven Prop | Valor/Comentario |
|---|---|---|
JETTY_PROPERTIES |
Lista separada por comas de pares name=value añadidos a $JETTY_ARGS |
|
JETTY_MODULES_ENABLE |
Lista separada por comas de los módulos que se van a habilitar. Para ello, se añade a $JETTY_ARGS. |
|
JETTY_MODULES_DISABLE |
Lista separada por comas de los módulos que se van a inhabilitar quitándolos de $JETTY_BASE/start.d |
|
JETTY_ARGS |
Argumentos transferidos a start.jar de Jetty. Aquí se deben incluir los argumentos que se usen para la configuración personalizada de Jetty. |
|
JAVA_OPTS |
Argumentos del entorno de ejecución de JVM |
Cloud Logging mejorado (beta)
Cuando se ejecuta en el entorno flexible de App Engine, puedes configurar Java Util Logging para enviar registros a Cloud Logging definiendo la variable de entorno JETTY_ARGS. Por ejemplo:
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
Debes proporcionar un archivo logging.properties que configure un LoggingHandler de la siguiente manera:
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
Compatibilidad con otros entornos de ejecución de Java
Si necesitas usar una versión de Java que no sea compatible, puedes crear un runtime personalizado y seleccionar una imagen base válida con la versión de Java que necesites.
Para obtener información sobre las imágenes base proporcionadas por Google o las imágenes base de Java de Docker, consulta el artículo Crear tiempos de ejecución personalizados.
Organizar tus archivos
El árbol de origen debería tener este aspecto:
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]Pruebas locales
Cuando hagas pruebas en tu entorno local, puedes usar servicios Google Cloud emulados en lugar de servicios Google Cloud remotos. Puedes usar los siguientes emuladores:
Usa el comando gcloud para iniciarlos antes de ejecutar tu aplicación:
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
Añade estas líneas al archivo pom.xml de Maven para añadir el plugin Maven de Jetty 9:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
Para ejecutar tu aplicación de forma local, usa el comando de Maven:
mvn jetty:run-exploded
Gradle
Sigue las instrucciones para crear un proyecto de Gradle y añadir el
complemento Gretty Gradle
a tu build.gradle. Después, usa el siguiente comando:
gradle jettyRun
Implementa tu aplicación
Para inicializar Google Cloud CLI, ejecuta el siguiente comando:
gcloud init
Una vez que hayas completado las configuraciones, puedes usar la CLI de Google Cloud para desplegar este directorio que contiene los archivos app.yaml y WAR con el siguiente comando:
gcloud app deploy app.yaml
Si usas alguno de los archivos de configuración opcionales (index.yaml, cron.yaml y dispatch.yaml), despliégalos por separado con el comando gcloud. Por ejemplo:
gcloud app deploy cron.yaml
Maven
Usa Maven para desplegar tu aplicación:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Sustituye PROJECT_ID por el ID de tu Google Cloud proyecto. Si tu archivo pom.xml ya especifica tu ID de proyecto, no es necesario que incluyas la propiedad -Dapp.deploy.projectId en el comando que ejecutes.
Gradle
Usa Gradle para desplegar tu aplicación:
gradle appengineDeploy