Questo documento descrive come ricompattare un'applicazione Java 8 come file JAR da eseguire su un runtime Java supportato. Per utilizzare un runtime Java supportato, puoi incorporare un server come Jetty o containerizzare l'applicazione con Docker per un runtime personalizzato senza riscrivere completamente l'applicazione. Puoi eseguire le tue applicazioni WAR esistenti su piattaforme Java moderne o ambienti cloud flessibili. Scegli tra i seguenti metodi quello più adatto alla tua strategia di implementazione e alla tua infrastruttura:
- Utilizza i Dockerfile per eseguire il deployment dell'applicazione (opzione consigliata)
- Utilizzare un runtime Java incorporato (Jetty)
Prepara l'applicazione web Java 8 (file WAR)
Prima di ricompattare l'applicazione Java 8 come file JAR supportato, devi
creare un file WAR. Questa sezione fornisce un'applicazione Java 8 di esempio che crea
un file WAR. Segui le istruzioni per creare un'applicazione Java 8 hello-world
:
Crea un file
HelloServlet.java
nella directory di origine:Crea un file descrittore di deployment
web.xml
per configurare l'applicazione web:Crea una pagina di destinazione
index.jsp
:Aggiungi il seguente codice al file
pom.xml
per definire la build per l'applicazione Java 8:Configurazione del pacchetto WAR:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>
Plug-in
maven-war-plugin
con origine e destinazione impostate sulla versione1.8
:maven.compiler
<properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <java.version>8</java.version> </properties>
javax.servlet-api
dipendenza:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
Configurazione 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>
La directory del progetto dovrebbe essere simile alla seguente struttura:
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Esegui
mvn install
nella directory del progetto dell'applicazione per generare il file WARHelloWorldApp-1.0.war
nella directory di destinazione.
Utilizza i Dockerfile per eseguire il deployment dell'applicazione (opzione consigliata)
I runtime personalizzati sono adatti alle piattaforme che supportano container personalizzati, come i runtime personalizzati di App Engine. I runtime personalizzati offrono flessibilità consentendoti di configurare l'ambiente di runtime. Per un esempio dettagliato del deployment dei runtime personalizzati, consulta Creare un'app con runtime personalizzato nell'ambiente flessibile di App Engine.
Le seguenti istruzioni descrivono come inserire in un container l'applicazione Java 8 utilizzando un Dockerfile:
- Prepara l'applicazione web Java 8 (file WAR)
- Crea l'immagine container ed eseguine il push su Artifact Registry
- Esegui il deployment dell'applicazione
Crea l'immagine container ed eseguine il push in Artifact Registry
Questa sezione descrive come creare un'immagine Docker utilizzando Cloud Build ed eseguirne il push in un repository Artifact Registry. Per creare un'immagine container della tua applicazione:
Crea un file
cloudbuild.yaml
nella directory di origine per creare l'immagine Docker ed eseguirne il push in 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"
Sostituisci:
- LOCATION con la regione Google Cloud in cui esegui il deployment dell'app.
- PROJECT con l'ID progetto Google Cloud .
- REPOSITORY con il nome del tuo repository Artifact Registry.
- IMAGE con l'URL dell'immagine del container.
- TAG con il tag dell'immagine container.
Crea un Dockerfile con la seguente configurazione:
Scarica e installa Docker per testare l'app di esempio ed eseguire il container Hello World sulla tua macchina locale.
Crea l'immagine container ed eseguine il push su Artifact Registry:
gcloud builds submit .
Esegui il deployment dell'applicazione
Per eseguire il deployment dell'applicazione App Engine:
Configura il file
app.yaml
per utilizzare un runtime personalizzato nella directory di origine:La directory del progetto dovrebbe essere simile alla seguente struttura:
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Esegui il deployment dell'applicazione utilizzando il comando
gcloud app deploy
:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tag
Sostituisci:
- LOCATION con la regione Google Cloud in cui esegui il deployment dell'app.
- PROJECT con l'ID progetto Google Cloud .
- REPOSITORY con il nome del tuo repository Artifact Registry.
- IMAGE con l'URL dell'immagine del container.
- TAG con il tag dell'immagine container.
Utilizzare un runtime Java incorporato
Le seguenti istruzioni mostrano come ricompilare un'applicazione App Engine Java 8 con un server incorporato (Jetty) per eseguirla come JAR autonomo in un runtime Java supportato:
- Crea un server Jetty incorporato
- Prepara l'applicazione web Java 8 (file WAR)
- Esegui il file WAR con Jetty incorporato ed esegui il deployment dell'applicazione
Crea un server Jetty incorporato
Per raggruppare il file WAR dell'applicazione con un server Jetty incorporato, segui questi passaggi:
Crea una classe
Main
per inizializzare e configurare il server Jetty per eseguire il file WAR. La classeMain
configura la porta del server, che per impostazione predefinita è8080
. Puoi anche modificare il codice sorgente per utilizzare una porta specificata nella variabile di ambientePORT
. La classeMain
configura il gestoreWebAppContext
per pubblicare il file WAR:Crea il file di progetto Maven
pom.xml
e aggiungi la seguente configurazione:Imposta le proprietà
maven.compiler.source
emaven.compiler.target
su un runtime Java supportato:Aggiungi le dipendenze per Jetty:
Configura la proprietà
maven-assembly-plugin
per le dipendenze del pacchetto:
La directory del progetto dovrebbe essere simile alla seguente struttura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xml
Esegui il comando
mvn install
nella directory del progetto Jetty Runner. In questo modo viene generato iljetty-jar-with-dependencies.jar
nella directory di destinazione.Segui le istruzioni nella sezione Prepara l'applicazione web Java 8 (file WAR) per creare un file WAR.
Esegui il file WAR con Jetty incorporato ed esegui il deployment dell'applicazione
Questa sezione fornisce i passaggi per creare un pacchetto dell'applicazione in un file JAR eseguibile. Segui queste istruzioni per creare il pacchetto e il deployment della tua applicazione:
Inserisci il file JAR Jetty Runner generato
jetty-jar-with-dependencies.jar
e il file WAR dell'applicazioneHelloWorldApp-1.0.war
nella stessa directory.Esegui l'applicazione utilizzando un runtime Java supportato:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war
- Nel browser web, vai all'indirizzo http://localhost:8080. Dovresti visualizzare la pagina di benvenuto della tua applicazione.
Crea un elemento
entrypoint
nel fileapp.yaml
per chiamare il filejetty-jar-with-dependencies
e passa il file WAR come argomento. La versione specificata nel file WAR deve essere la stessa del filepom.xml
:Esegui il deployment dell'applicazione utilizzando il comando
gcloud app deploy
.