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.javaen tu directorio del código fuente:Crea un archivo descriptor de implementación
web.xmlpara configurar tu aplicación web:Crea una página de destino
index.jsp:Agrega el siguiente código al archivo
pom.xmlpara 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-plugincon el origenmaven.compilery 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.jspEjecuta
mvn installen el directorio del proyecto de tu aplicación para generar el archivo WARHelloWorldApp-1.0.waren 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.yamlen 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.yamlpara 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.jspImplementa la aplicación con el comando
gcloud app deploy:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagReemplaza 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
Mainpara inicializar y configurar el servidor Jetty para que ejecute tu archivo WAR. La claseMainconfigura 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 claseMainconfigura el controladorWebAppContextpara que entregue tu archivo WAR:Crea el archivo del proyecto de Maven
pom.xmly agrega la siguiente configuración:Establece las propiedades
maven.compiler.sourceymaven.compiler.targeten un entorno de ejecución de Java compatible:Agrega dependencias para Jetty:
Configura la propiedad
maven-assembly-pluginpara empaquetar dependencias:
El directorio de tu proyecto debería ser similar a la siguiente estructura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlEjecuta el comando
mvn installen el directorio del proyecto del ejecutor de Jetty. Esto genera eljetty-jar-with-dependencies.jaren 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.jary el archivo WAR de tu aplicaciónHelloWorldApp-1.0.waren 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
entrypointen el archivoapp.yamlpara llamar al archivojetty-jar-with-dependenciesy 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.