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.javadans votre répertoire source :Créez un fichier descripteur de déploiement
web.xmlpour configurer votre application Web :Créez une page de destination
index.jsp:Ajoutez le code suivant dans le fichier
pom.xmlpour 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-pluginavec la source et la ciblemaven.compilerdé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.jspExécutez
mvn installdans le répertoire du projet de votre application pour générer le fichier WARHelloWorldApp-1.0.wardans 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.yamldans 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.yamlpour 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.jspDéployez votre application à l'aide de la commande
gcloud app deploy:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagRemplacez :
- 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
Mainpour initialiser et configurer le serveur Jetty afin d'exécuter votre fichier WAR. La classeMainconfigure 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 classeMainconfigure le gestionnaireWebAppContextpour diffuser votre fichier WAR :Créez le fichier de projet Maven
pom.xmlet ajoutez la configuration suivante :Définissez les propriétés
maven.compiler.sourceetmaven.compiler.targetsur un environnement d'exécution Java compatible :Ajoutez des dépendances pour Jetty :
Configurez la propriété
maven-assembly-pluginpour les dépendances du package :
Le répertoire de votre projet doit ressembler à la structure suivante :
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlExécutez la commande
mvn installdans le répertoire du projet Jetty Runner. Cela génère lejetty-jar-with-dependencies.jardans 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.jaret le fichier WAR de votre applicationHelloWorldApp-1.0.wardans 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
entrypointdans votre fichierapp.yamlpour appeler le fichierjetty-jar-with-dependencieset 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.