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, você pode incorporar um servidor como o Jetty ou conteinerizar seu 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 um dos métodos a seguir que melhor se adapta à sua estratégia de implantação e infraestrutura:
- Usar Dockerfiles para implantar o 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 aplicativo Java 8 de amostra que cria um arquivo WAR. Siga as instruções para criar um aplicativo hello-world Java 8:
Crie um arquivo
HelloServlet.javano diretório de origem:Crie um arquivo descritor de implementação
web.xmlpara configurar o aplicativo da Web:Crie uma página de destino
index.jsp:Adicione o código a seguir ao arquivo
pom.xmlpara definir a versão do 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-plugincom a origem e o destinomaven.compilerdefinidos como 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>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.jspExecute
mvn installno diretório do projeto do aplicativo para gerar o arquivo WARHelloWorldApp-1.0.warno diretório de destino.
Usar Dockerfiles para implantar o aplicativo (recomendado)
Os ambientes de execução personalizados são adequados para plataformas que oferecem suporte a contêineres personalizados, como os ambientes de execução personalizados do App Engine. Os ambientes de execução personalizados oferecem flexibilidade, permitindo que você configure o ambiente de execução. Para conferir 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 conteinerizar o aplicativo Java 8 usando um Dockerfile:
- Preparar o aplicativo da Web Java 8 (arquivo WAR)
- Criar a imagem do contêiner e enviá-la para o Artifact Registry
- implantar o aplicativo
Criar a imagem do contêiner e enviá-la para o Artifact Registry
Esta seção descreve como criar uma imagem 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 aplicativo:
Crie um arquivo
cloudbuild.yamlno diretório de origem para criar a imagem do Docker e enviar 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 pela Google Cloud região em que você implanta o app.
- PROJECT pelo ID do seu Google Cloud projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- IMAGE pelo URL da imagem do contêiner.
- TAG pela 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 exemplo e execute o contêiner do Hello World na máquina local.
Crie a imagem do contêiner e envie-a para o Artifact Registry:
gcloud builds submit .
implantar o aplicativo
Para implantar o aplicativo do App Engine:
Configure o arquivo
app.yamlpara 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.jspImplante o aplicativo usando o
gcloud app deploycomando:gcloud app deploy --image-url=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:tagSubstitua:
- LOCATION pela Google Cloud região em que você implanta o app.
- PROJECT pelo ID do seu Google Cloud projeto.
- REPOSITORY pelo nome do repositório do Artifact Registry.
- IMAGE pelo URL da imagem do contêiner.
- TAG pela 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)
- Executar o arquivo WAR com o Jetty incorporado e implantar 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
Mainpara inicializar e configurar o servidor Jetty para executar o arquivo WAR. A classeMainconfigura a porta do servidor, que é8080por padrão. Também é possível modificar o código-fonte para usar uma porta especificada na variável de ambientePORT. A classeMainconfigura o gerenciadorWebAppContextpara veicular o arquivo WAR:Crie o arquivo de projeto do Maven
pom.xmle adicione a seguinte configuração:Defina as propriedades
maven.compiler.sourceemaven.compiler.targetpara um ambiente de execução Java compatível:Adicione dependências para o Jetty:
Configure a propriedade
maven-assembly-pluginpara empacotar dependências:
O diretório do projeto precisa ser semelhante à seguinte estrutura:
├─src │ └─main │ └─java │ └─jetty │ └─Main.java └─pom.xmlExecute o comando
mvn installno diretório do projeto do executor do Jetty. Isso gera ojetty-jar-with-dependencies.jarno 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.
Executar o arquivo WAR com o Jetty incorporado e implantar o aplicativo
Esta seção fornece etapas para empacotar o aplicativo em um arquivo JAR executável. Siga estas instruções para empacotar e implantar o aplicativo:
Coloque o JAR do executor do Jetty gerado
jetty-jar-with-dependencies.jare o arquivo WAR do aplicativoHelloWorldApp-1.0.warno 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 será exibida.
Crie um elemento
entrypointno arquivoapp.yamlpara chamar o arquivojetty-jar-with-dependenciese 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
gcloud app deploycomando.