Ce document explique comment réempaqueter une application Java 8 en tant que fichier JAR à exécuter sur un environnement d'exécution Java compatible. Pour utiliser un environnement d'exécution Java compatible, vous pouvez intégrer un serveur tel que Jetty ou conteneuriser votre application avec Docker pour un environnement d'exécution personnalisé sans réécrire complètement votre application. Vous pouvez exécuter vos applications WAR existantes sur des plates-formes Java modernes ou des environnements cloud flexibles. Choisissez parmi les méthodes suivantes celle qui correspond le mieux à votre stratégie de déploiement et à votre infrastructure :
- Utiliser des fichiers Dockerfile pour déployer votre application (recommandé)
- Utiliser un environnement d'exécution Java intégré (Jetty)
Préparer votre application Web Java 8 (fichier WAR)
Avant de réempaqueter votre application Java 8 en tant que fichier JAR compatible, vous devez créer un fichier WAR. Cette section fournit un exemple d'application Java 8 qui crée un fichier WAR. Suivez les instructions pour créer une application Java 8 hello-world
:
Créez un fichier
HelloServlet.java
dans votre répertoire source :Créez un fichier descripteur de déploiement
web.xml
pour configurer votre application Web :Créez une page de destination
index.jsp
:Ajoutez le code suivant dans le fichier
pom.xml
pour définir le build de votre application Java 8 :Configuration de l'empaquetage WAR :
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>
Plug-in
maven-war-plugin
avec la source et la ciblemaven.compiler
définies sur la version1.8
:<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>8</java.version> </properties>
Dépendance
javax.servlet-api
:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
Configuration 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>
Le répertoire de votre projet doit ressembler à la structure suivante :
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Exécutez
mvn install
dans le répertoire du projet de votre application pour générer le fichier WARHelloWorldApp-1.0.war
dans le répertoire cible.
Utiliser des fichiers Dockerfile pour déployer votre application (recommandé)
Les environnements d'exécution personnalisés conviennent aux plates-formes compatibles avec les conteneurs personnalisés, comme les environnements d'exécution personnalisés App Engine. Les environnements d'exécution personnalisés offrent de la flexibilité en vous permettant de configurer l'environnement d'exécution. Pour obtenir un exemple de procédure de déploiement d'environnements d'exécution personnalisés, consultez Créer une application d'exécution personnalisée dans l'environnement flexible App Engine.
Les instructions suivantes décrivent comment conteneuriser votre application Java 8 à l'aide d'un fichier Dockerfile :
- Préparer votre application Web Java 8 (fichier WAR)
- Créer l'image de conteneur et la transférer vers Artifact Registry
- Déployer votre application
Créer l'image de conteneur et la transférer vers Artifact Registry
Cette section explique comment créer une image Docker à l'aide de Cloud Build et la transférer vers un dépôt Artifact Registry. Pour créer une image de conteneur de votre application, procédez comme suit :
Créez un fichier
cloudbuild.yaml
dans votre répertoire source pour créer l'image Docker et la transférer vers 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"
Remplacez :
- LOCATION par la région Google Cloud dans laquelle vous déployez votre application.
- PROJECT par l'ID de votre projet Google Cloud .
- REPOSITORY par le nom de votre dépôt Artifact Registry.
- IMAGE par l'URL de votre image de conteneur.
- TAG par le tag de votre image de conteneur.
Créez un fichier Dockerfile avec la configuration suivante :
Téléchargez et installez Docker pour tester votre exemple d'application et exécuter le conteneur Hello World sur votre ordinateur local.
Créez l'image de conteneur et transférez-la vers Artifact Registry :
gcloud builds submit .
Déployer votre application
Pour déployer votre application App Engine :
Configurez votre fichier
app.yaml
pour utiliser un environnement d'exécution personnalisé dans le répertoire source :Le répertoire de votre projet doit ressembler à la structure suivante :
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Déployez votre application à l'aide de la commande
gcloud app deploy
:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tag
Remplacez :
- LOCATION par la région Google Cloud dans laquelle vous déployez votre application.
- PROJECT par l'ID de votre projet Google Cloud .
- REPOSITORY par le nom de votre dépôt Artifact Registry.
- IMAGE par l'URL de votre image de conteneur.
- TAG par le tag de votre image de conteneur.
Utiliser un environnement d'exécution Java intégré
Les instructions suivantes montrent comment réempaqueter une application Java 8 App Engine avec un serveur intégré (Jetty) pour l'exécuter en tant que fichier JAR autonome sur un environnement d'exécution Java compatible :
- Créer un serveur Jetty intégré
- Préparer votre application Web Java 8 (fichier WAR)
- Exécuter le fichier WAR avec Jetty intégré et déployer votre application
Créer un serveur Jetty intégré
Pour regrouper le fichier WAR de votre application avec un serveur Jetty intégré, procédez comme suit :
Créez une classe
Main
pour initialiser et configurer le serveur Jetty afin d'exécuter votre fichier WAR. La classeMain
configure le port du serveur, qui est défini par défaut sur8080
. Vous pouvez également modifier le code source pour utiliser un port spécifié dans la variable d'environnementPORT
. La classeMain
configure le gestionnaireWebAppContext
pour diffuser votre fichier WAR :Créez le fichier de projet Maven
pom.xml
et ajoutez la configuration suivante :Définissez les propriétés
maven.compiler.source
etmaven.compiler.target
sur un environnement d'exécution Java compatible :Ajoutez des dépendances pour Jetty :
Configurez la propriété
maven-assembly-plugin
pour les dépendances du package :
Le répertoire de votre projet doit ressembler à la structure suivante :
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xml
Exécutez la commande
mvn install
dans le répertoire du projet Jetty Runner. Cela génère lejetty-jar-with-dependencies.jar
dans votre répertoire cible.Suivez les instructions de la section Préparer votre application Web Java 8 (fichier WAR) pour créer un fichier WAR.
Exécuter le fichier WAR avec Jetty intégré et déployer votre application
Cette section explique comment empaqueter votre application dans un fichier JAR exécutable. Suivez ces instructions pour empaqueter et déployer votre application :
Placez le fichier JAR du programme d'exécution Jetty généré
jetty-jar-with-dependencies.jar
et le fichier WAR de votre applicationHelloWorldApp-1.0.war
dans le même répertoire.Exécutez l'application à l'aide d'un environnement d'exécution Java compatible :
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war
- Dans votre navigateur Web, accédez à http://localhost:8080. La page de bienvenue de votre application devrait s'afficher.
Créez un élément
entrypoint
dans votre fichierapp.yaml
pour appeler le fichierjetty-jar-with-dependencies
et transmettre votre fichier WAR en tant qu'argument. La version que vous spécifiez dans le fichier WAR doit être identique à celle du fichierpom.xml
:Déployez votre application à l'aide de la commande
gcloud app deploy
.