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 avoir à la réécrire complètement. Vous pouvez exécuter vos applications WAR existantes sur des plates-formes Java modernes ou des environnements cloud flexibles. Choisissez l'une des méthodes suivantes qui correspond le mieux à votre stratégie de déploiement et à votre infrastructure :
- Utiliser des Dockerfiles 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 la compilation 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 sourcemaven.compileret la cible 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.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 Dockerfiles pour déployer votre application (recommandé)
Les environnements d'exécution personnalisés conviennent aux plates-formes compatibles avec les conteneurs personnalisés, telles que les environnements d'exécution personnalisés App Engine. Ils offrent une flexibilité en vous permettant de configurer l'environnement d'exécution. Pour obtenir un exemple de procédure pas à pas 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 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 Google Cloud région dans laquelle vous déployez votre application.
- PROJECT par l'ID de votre Google Cloud projet.
- 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 Dockerfile avec la configuration suivante :
Téléchargez et installez Docker pour tester votre application exemple, puis exécutez 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
gcloud app deploycommande :gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagRemplacez :
- LOCATION par la Google Cloud région dans laquelle vous déployez votre application.
- PROJECT par l'ID de votre Google Cloud projet.
- 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
maven.compiler.sourceetmaven.compiler.targetpropriétés sur un environnement d'exécution Java compatible :Ajoutez des dépendances pour Jetty :
Configurez la propriété
maven-assembly-pluginpour empaqueter les dépendances :
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 d'exécution Jetty. Cela génère le fichierjetty-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. Pour empaqueter et déployer votre application, procédez comme suit :
Placez le fichier JAR 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 doit s'afficher.
Créez un élément
entrypointdans votre fichierapp.yamlpour appeler le fichierjetty-jar-with-dependencieset transmettez votre fichier WAR en tant qu'argument. La version que vous spécifiez dans le fichier WAR doit être la même que celle du fichierpom.xml:Déployez votre application à l'aide de la
gcloud app deploycommande.