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.javanella directory di origine:Crea un file descrittore di deployment
web.xmlper configurare l'applicazione web:Crea una pagina di destinazione
index.jsp:Aggiungi il seguente codice al file
pom.xmlper 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-plugincon 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-apidipendenza:<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.jspEsegui
mvn installnella directory del progetto dell'applicazione per generare il file WARHelloWorldApp-1.0.warnella 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.yamlnella 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.yamlper 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.jspEsegui il deployment dell'applicazione utilizzando il comando
gcloud app deploy:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagSostituisci:
- 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
Mainper inizializzare e configurare il server Jetty per eseguire il file WAR. La classeMainconfigura 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 classeMainconfigura il gestoreWebAppContextper pubblicare il file WAR:Crea il file di progetto Maven
pom.xmle aggiungi la seguente configurazione:Imposta le proprietà
maven.compiler.sourceemaven.compiler.targetsu un runtime Java supportato:Aggiungi le dipendenze per Jetty:
Configura la proprietà
maven-assembly-pluginper le dipendenze del pacchetto:
La directory del progetto dovrebbe essere simile alla seguente struttura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlEsegui il comando
mvn installnella directory del progetto Jetty Runner. In questo modo viene generato iljetty-jar-with-dependencies.jarnella 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.jare il file WAR dell'applicazioneHelloWorldApp-1.0.warnella 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
entrypointnel fileapp.yamlper chiamare il filejetty-jar-with-dependenciese 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.