Este documento descreve como reempacotar uma aplicação Java 8 como um ficheiro JAR para execução num tempo de execução Java suportado. Para usar um tempo de execução Java suportado, pode incorporar um servidor como o Jetty ou colocar a sua aplicação num contentor com o Docker para um tempo de execução personalizado sem reescrever completamente a aplicação. Pode executar as suas aplicações WAR existentes em plataformas Java modernas ou ambientes de nuvem flexíveis. Escolha um dos seguintes métodos que melhor se adequa à sua estratégia de implementação e infraestrutura:
- Use ficheiros Dockerfile para implementar a sua aplicação (recomendado)
- Use um tempo de execução Java incorporado (Jetty)
Prepare a sua aplicação Web Java 8 (ficheiro WAR)
Antes de reempacotar a sua aplicação Java 8 como um ficheiro JAR suportado, tem de criar um ficheiro WAR. Esta secção fornece uma aplicação Java 8 de exemplo que cria um ficheiro WAR. Siga as instruções para criar uma aplicação Java 8 hello-world
:
Crie um ficheiro
HelloServlet.java
no diretório de origem:Crie um ficheiro de descritor de implementação
web.xml
para configurar a sua aplicação Web:Crie uma página de destino
index.jsp
:Adicione o seguinte código no ficheiro
pom.xml
para definir a compilação da sua aplicação Java 8:Configuração da embalagem WAR:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>
maven-war-plugin
com a origemmaven.compiler
e o destino definidos para a versão1.8
:<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
dependência:<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies>
Configuração do 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>
O diretório do projeto deve ser semelhante à seguinte estrutura:
├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Execute
mvn install
no diretório do projeto da sua aplicação para gerar o ficheiro WARHelloWorldApp-1.0.war
no diretório de destino.
Use ficheiros Docker para implementar a sua aplicação (recomendado)
Os tempos de execução personalizados são adequados para plataformas que suportam contentores personalizados, como os tempos de execução personalizados do App Engine. Os tempos de execução personalizados oferecem flexibilidade, permitindo-lhe configurar o ambiente de tempo de execução. Para ver um exemplo passo a passo da implementação de tempos de execução personalizados, consulte o artigo Crie uma app de tempo de execução personalizado no ambiente flexível do App Engine.
As instruções seguintes descrevem como colocar a sua aplicação Java 8 num contentor usando um Dockerfile:
- Prepare a sua aplicação Web Java 8 (ficheiro WAR)
- Crie a imagem de contentor e envie-a para o Artifact Registry
- Implemente a sua aplicação
Crie a imagem de contentor e envie-a para o Artifact Registry
Esta secção descreve como criar uma imagem do Docker com o Cloud Build e enviá-la para um repositório do Artifact Registry. Siga estes passos para criar uma imagem de contentor da sua aplicação:
Crie um ficheiro
cloudbuild.yaml
no diretório de origem para criar a imagem do Docker e enviá-la para o 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"
Substituição:
- LOCATION com a Google Cloud região onde implementa a sua app.
- PROJECT com o ID do seu Google Cloud projeto.
- REPOSITORY com o nome do seu repositório do Artifact Registry.
- IMAGE com o URL da imagem do contentor.
- TAG com a etiqueta de imagem do contentor.
Crie um Dockerfile com a seguinte configuração:
Transfira e instale o Docker para testar a app de exemplo e execute o contentor Hello World na sua máquina local.
Crie a imagem de contentor e envie-a para o Artifact Registry:
gcloud builds submit .
Implemente a sua aplicação
Para implementar a sua aplicação do App Engine:
Configure o ficheiro
app.yaml
para usar um tempo de execução personalizado no diretório de origem:O diretório do projeto deve ser semelhante à seguinte estrutura:
├── Dockerfile ├── README.md ├── app.yaml ├── cloudbuild.yaml ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── HelloServlet.java └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
Implemente a sua aplicação através do comando
gcloud app deploy
:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tag
Substituição:
- LOCATION com a Google Cloud região onde implementa a sua app.
- PROJECT com o ID do seu Google Cloud projeto.
- REPOSITORY com o nome do seu repositório do Artifact Registry.
- IMAGE com o URL da imagem do contentor.
- TAG com a etiqueta de imagem do contentor.
Use um tempo de execução Java incorporado
As instruções seguintes demonstram como reempacotar uma aplicação Java 8 do App Engine com um servidor incorporado (Jetty) para ser executada como um JAR autónomo num tempo de execução Java suportado:
- Crie um servidor Jetty incorporado
- Prepare a sua aplicação Web Java 8 (ficheiro WAR)
- Execute o ficheiro WAR com o Jetty incorporado e implemente a sua aplicação
Crie um servidor Jetty incorporado
Para agrupar o ficheiro WAR da sua aplicação com um servidor Jetty incorporado, siga estes passos:
Crie uma classe
Main
para inicializar e configurar o servidor Jetty para executar o seu ficheiro WAR. A classeMain
configura a porta do servidor que tem como predefinição8080
. Também pode modificar o código fonte para usar uma porta especificada na variável de ambiente.PORT
A classeMain
configura o controladorWebAppContext
para disponibilizar o seu ficheiro WAR:Crie o ficheiro do projeto Maven
pom.xml
e adicione a seguinte configuração:Defina as propriedades
maven.compiler.source
emaven.compiler.target
para um tempo de execução Java suportado:Adicione dependências para o Jetty:
Configure a propriedade
maven-assembly-plugin
para criar dependências de pacotes:
O diretório do projeto deve ser semelhante à seguinte estrutura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xml
Execute o comando
mvn install
no diretório do projeto do Jetty Runner. Isto gera o ficheirojetty-jar-with-dependencies.jar
no diretório de destino.Siga as instruções na secção Prepare a sua aplicação Web Java 8 (ficheiro WAR) para criar um ficheiro WAR.
Execute o ficheiro WAR com o Jetty incorporado e implemente a sua aplicação
Esta secção fornece passos para criar um pacote da sua aplicação num ficheiro JAR executável. Siga estas instruções para criar o pacote e implementar a sua aplicação:
Coloque o JAR do Jetty Runner gerado
jetty-jar-with-dependencies.jar
e o ficheiro WAR da sua aplicaçãoHelloWorldApp-1.0.war
no mesmo diretório.Execute a aplicação com um runtime Java suportado:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war
- No navegador de Internet, navegue para http://localhost:8080. Deverá ver a página de boas-vindas da aplicação.
Crie um elemento
entrypoint
no ficheiroapp.yaml
para chamar o ficheirojetty-jar-with-dependencies
e transmita o ficheiro WAR como um argumento. A versão especificada no ficheiro WAR tem de ser a mesma versão que a do ficheiropom.xml
:Implemente a sua aplicação através do comando
gcloud app deploy
.