Este documento descreve como reempacotar um aplicativo Java 8 como um arquivo JAR para ser executado em um ambiente de execução Java compatível. Para usar um ambiente de execução Java compatível, é possível incorporar um servidor como o Jetty ou conteinerizar o aplicativo com o Docker para um ambiente de execução personalizado sem reescrever completamente o aplicativo. É possível executar seus aplicativos WAR atuais em plataformas Java modernas ou ambientes de nuvem flexíveis. Escolha entre os seguintes métodos que melhor se adequam à sua estratégia de implantação e infraestrutura:
- Usar Dockerfiles para implantar seu aplicativo (recomendado)
- Usar um ambiente de execução Java incorporado (Jetty)
Preparar o aplicativo da Web Java 8 (arquivo WAR)
Antes de reempacotar o aplicativo Java 8 como um arquivo JAR compatível, é necessário
criar um arquivo WAR. Esta seção fornece um exemplo de aplicativo Java 8 que cria
um arquivo WAR. Siga as instruções para criar um aplicativo hello-world
em Java 8:
Crie um arquivo
HelloServlet.java
no diretório de origem:Crie um arquivo descritor de implantação
web.xml
para configurar seu aplicativo da Web:Crie uma página de destino
index.jsp
:Adicione o código a seguir ao arquivo
pom.xml
para definir o build do seu aplicativo Java 8:Configuração de empacotamento WAR:
<groupId>com.example</groupId> <artifactId>HelloWorldApp</artifactId> <version>1.0</version> <packaging>war</packaging>
Plug-in
maven-war-plugin
com a origem e o destinomaven.compiler
definidos como 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>
Dependência
javax.servlet-api
:<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 precisa 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 do aplicativo para gerar o arquivo WARHelloWorldApp-1.0.war
no diretório de destino.
Usar Dockerfiles para implantar o aplicativo (recomendado)
Os ambientes de execução personalizados são adequados para plataformas que aceitam contêineres personalizados, como os ambientes de execução personalizados do App Engine. Os ambientes de execução personalizados oferecem flexibilidade ao permitir que você configure o ambiente de execução. Para um exemplo de implantação de ambientes de execução personalizados, consulte Criar um aplicativo de ambiente de execução personalizado no ambiente flexível do App Engine.
As instruções a seguir descrevem como criar um contêiner do seu aplicativo Java 8 usando um Dockerfile:
- Preparar o aplicativo da Web Java 8 (arquivo WAR)
- Crie a imagem do contêiner e envie-a para o Artifact Registry.
- Implantar o aplicativo
Crie a imagem do contêiner e envie-a para o Artifact Registry
Nesta seção, descrevemos como criar uma imagem do Docker usando o Cloud Build e enviá-la para um repositório do Artifact Registry. Siga estas etapas para criar uma imagem de contêiner do seu aplicativo:
Crie um arquivo
cloudbuild.yaml
no diretório de origem para criar a imagem do Docker e envie 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"
Substitua:
- LOCATION com a região Google Cloud em que você implanta o app.
- PROJECT com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- IMAGE com o URL da imagem do contêiner.
- TAG com a tag da imagem do contêiner.
Crie um Dockerfile com a seguinte configuração:
Faça o download e instale o Docker para testar o app de amostra e execute o contêiner Hello World na sua máquina local.
Crie a imagem do contêiner e envie-a para o Artifact Registry:
gcloud builds submit .
Implantar aplicativo
Para implantar o aplicativo do App Engine:
Configure o arquivo
app.yaml
para usar um ambiente de execução personalizado no diretório de origem:O diretório do projeto precisa 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
Implante o aplicativo usando o comando
gcloud app deploy
:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tag
Substitua:
- LOCATION com a região Google Cloud em que você implanta o app.
- PROJECT com seu Google Cloud ID do projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- IMAGE com o URL da imagem do contêiner.
- TAG com a tag da imagem do contêiner.
Usar um ambiente de execução Java incorporado
As instruções a seguir demonstram como reempacotar um aplicativo Java 8 do App Engine com um servidor incorporado (Jetty) para ser executado como um JAR independente em um ambiente de execução Java compatível:
- Criar um servidor Jetty incorporado
- Preparar o aplicativo da Web Java 8 (arquivo WAR)
- Execute o arquivo WAR com o Jetty incorporado e implante o aplicativo
Criar um servidor Jetty incorporado
Para agrupar o arquivo WAR do aplicativo com um servidor Jetty incorporado, siga estas etapas:
Crie uma classe
Main
para inicializar e configurar o servidor Jetty para executar seu arquivo WAR. A classeMain
configura a porta do servidor, que é8080
por padrão. Também é possível modificar o código-fonte para usar uma porta especificada na variável de ambientePORT
. A classeMain
configura o gerenciadorWebAppContext
para veicular seu arquivo WAR:Crie o arquivo de projeto do Maven
pom.xml
e adicione a seguinte configuração:Defina as propriedades
maven.compiler.source
emaven.compiler.target
para um ambiente de execução Java compatível:Adicione dependências do Jetty:
Configure a propriedade
maven-assembly-plugin
para empacotar dependências:
O diretório do projeto precisa ser semelhante à seguinte estrutura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xml
Execute o comando
mvn install
no diretório do projeto do executor do Jetty. Isso gera ojetty-jar-with-dependencies.jar
no diretório de destino.Siga as instruções na seção Preparar o aplicativo da Web Java 8 (arquivo WAR) para criar um arquivo WAR.
Execute o arquivo WAR com o Jetty incorporado e implante o aplicativo.
Esta seção mostra as etapas para empacotar seu aplicativo em um arquivo JAR executável. Siga estas instruções para empacotar e implantar seu aplicativo:
Coloque o JAR do executor do Jetty gerado
jetty-jar-with-dependencies.jar
e o arquivo WAR do aplicativoHelloWorldApp-1.0.war
no mesmo diretório.Execute o aplicativo usando um ambiente de execução Java compatível:
java -jar jetty-jar-with-dependencies.jar HelloWorldApp-1.0.war
- No navegador da Web, acesse http://localhost:8080. A página de boas-vindas do aplicativo vai aparecer.
Crie um elemento
entrypoint
no arquivoapp.yaml
para chamar o arquivojetty-jar-with-dependencies
e insira o arquivo WAR como um argumento. A versão especificada no arquivo WAR precisa ser a mesma do arquivopom.xml
:Implante o aplicativo usando o comando
gcloud app deploy
.