En este documento, se describe cómo volver a empaquetar una aplicación de Java 8 como un archivo JAR para que se ejecute en un entorno de ejecución de Java compatible. Para usar un entorno de ejecución de Java compatible, puedes incorporar un servidor como Jetty o crear un contenedor para tu aplicación con Docker para un entorno de ejecución personalizado sin tener que reescribir completamente tu aplicación. Puedes ejecutar tus aplicaciones WAR existentes en plataformas Java modernas o entornos de nube flexibles. Elige uno de los siguientes métodos que mejor se adapte a tu estrategia de implementación y a tu infraestructura:
- Usa Dockerfiles para implementar tu aplicación (recomendado)
- Usa un entorno de ejecución de Java integrado (Jetty)
Prepara tu aplicación web de Java 8 (archivo WAR)
Antes de volver a empaquetar tu aplicación de Java 8 como un archivo JAR compatible, debes compilar un archivo WAR. En esta sección, se proporciona una aplicación de Java 8 de ejemplo que compila un archivo WAR. Sigue las instrucciones para crear una aplicación hello-world
de Java 8:
Crea un archivo
HelloServlet.java
en tu directorio del código fuente:Crea un archivo descriptor de implementación
web.xml
para configurar tu aplicación web:Crea una página de destino
index.jsp
:Agrega el siguiente código al archivo
pom.xml
para definir la compilación de tu aplicación en Java 8:Configuración del empaquetado de WAR:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>
Complemento de
maven-war-plugin
con el origenmaven.compiler
y el destino configurados en la versión1.8
:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>8</java.version> </properties>
Dependencia de
javax.servlet-api
:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
Configuración de Maven:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build>
El directorio de tu proyecto debería ser similar a la siguiente estructura:
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Ejecuta
mvn install
en el directorio del proyecto de tu aplicación para generar el archivo WARHelloWorldApp-1.0.war
en el directorio de destino.
Usa Dockerfiles para implementar tu aplicación (recomendado)
Los entornos de ejecución personalizados son adecuados para las plataformas que admiten contenedores personalizados, como los entornos de ejecución personalizados de App Engine. Los entornos de ejecución personalizados proporcionan flexibilidad, ya que te permiten configurar el entorno de ejecución. Para ver un ejemplo de cómo implementar entornos de ejecución personalizados, consulta Crea una app del entorno de ejecución personalizado en el entorno flexible de App Engine.
En las siguientes instrucciones, se describe cómo crear un contenedor para tu aplicación de Java 8 con un Dockerfile:
- Prepara tu aplicación web de Java 8 (archivo WAR)
- Compila la imagen del contenedor y envíala a Artifact Registry
- Implementa tu aplicación
Compila la imagen del contenedor y envíala a Artifact Registry
En esta sección, se describe cómo compilar una imagen de Docker con Cloud Build y enviarla a un repositorio de Artifact Registry. Sigue estos pasos para crear una imagen de contenedor de tu aplicación:
Crea un archivo
cloudbuild.yaml
en tu directorio del código fuente para compilar la imagen de Docker y enviarla a Artifact Registry:steps: # Step 1: Build the Docker image - name: "gcr.io/cloud-builders/docker" args: - "build" - "-t" - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION" - "." # Step 2: Push the Docker image to Artifact Registry - name: "gcr.io/cloud-builders/docker" args: - "push" - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION" images: - "$LOCATION-docker.pkg.dev/$PROJECT/$REPOSITORY/SERVICE:VERSION"
Reemplaza lo siguiente:
- LOCATION por la región de Google Cloud en la que implementas tu app.
- PROJECT por el ID de tu proyecto Google Cloud .
- REPOSITORY por el nombre de tu repositorio de Artifact Registry
- IMAGE por la URL de la imagen de contenedor
- TAG por la etiqueta de la imagen de contenedor
Crea un Dockerfile con la siguiente configuración:
Descarga e instala Docker para probar tu app de muestra y ejecutar el contenedor de Hello World en tu máquina local.
Compila la imagen del contenedor y envíala a Artifact Registry:
gcloud builds submit .
Implementa tu aplicación
Para implementar tu aplicación de App Engine, sigue estos pasos:
Configura tu archivo
app.yaml
para usar un entorno de ejecución personalizado en el directorio de origen:El directorio de tu proyecto debería ser similar a la siguiente estructura:
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Implementa la aplicación con el comando
gcloud app deploy
:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tag
Reemplaza lo siguiente:
- LOCATION por la región de Google Cloud en la que implementas tu app.
- PROJECT por el ID de tu proyecto Google Cloud .
- REPOSITORY por el nombre de tu repositorio de Artifact Registry
- IMAGE por la URL de la imagen de contenedor
- TAG por la etiqueta de la imagen de contenedor
Usa un entorno de ejecución de Java integrado
En las siguientes instrucciones, se muestra cómo volver a empaquetar una aplicación de Java 8 de App Engine con un servidor integrado (Jetty) para que se ejecute como un archivo JAR independiente en un entorno de ejecución de Java compatible:
- Crea un servidor Jetty incorporado
- Prepara tu aplicación web de Java 8 (archivo WAR)
- Ejecuta el archivo WAR con Jetty integrado y, luego, implementa tu aplicación
Crea un servidor Jetty integrado
Para empaquetar el archivo WAR de tu aplicación con un servidor Jetty integrado, sigue estos pasos:
Crea una clase
Main
para inicializar y configurar el servidor Jetty para que ejecute tu archivo WAR. La claseMain
configura el puerto del servidor, que tiene el valor predeterminado8080
. También puedes modificar el código fuente para usar un puerto especificado en la variable de entornoPORT
. La claseMain
configura el controladorWebAppContext
para que entregue tu archivo WAR:Crea el archivo del proyecto de Maven
pom.xml
y agrega la siguiente configuración:Establece las propiedades
maven.compiler.source
ymaven.compiler.target
en un entorno de ejecución de Java compatible:Agrega dependencias para Jetty:
Configura la propiedad
maven-assembly-plugin
para empaquetar dependencias:
El directorio de tu proyecto debería ser similar a la siguiente estructura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xml
Ejecuta el comando
mvn install
en el directorio del proyecto del ejecutor de Jetty. Esto genera eljetty-jar-with-dependencies.jar
en tu directorio de destino.Sigue las instrucciones de la sección Prepara tu aplicación web de Java 8 (archivo WAR) para crear un archivo WAR.
Ejecuta el archivo WAR con Jetty integrado y, luego, implementa tu aplicación
En esta sección, se proporcionan los pasos para empaquetar tu aplicación en un archivo JAR ejecutable. Sigue estas instrucciones para empaquetar e implementar tu aplicación:
Coloca el archivo JAR del ejecutor de Jetty generado
jetty-jar-with-dependencies.jar
y el archivo WAR de tu aplicaciónHelloWorldApp-1.0.war
en el mismo directorio.Ejecuta la aplicación con un entorno de ejecución de Java compatible:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war
- En tu navegador web, ve a http://localhost:8080. Deberías ver la página de bienvenida de tu aplicación.
Crea un elemento
entrypoint
en el archivoapp.yaml
para llamar al archivojetty-jar-with-dependencies
y pasar el archivo WAR como argumento. La versión que especifiques en el archivo WAR debe ser la misma que la del archivopom.xml
:Implementa la aplicación con el comando
gcloud app deploy
.