Como migrar para o plug-in do Gradle baseado na CLI gcloud
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Se você já usou o plug-in baseado no SDK do App Engine para Java
(com.google.appengine.appengine-gradle
) e quiser passar para a nova
Google Cloud CLI, migre para o plug-in (com.google.cloud.tools.appengine-gradle
) baseado em CLI ().
Benefícios do plug-in baseado na CLI gcloud
O upgrade para o novo plug-in oferece os seguintes benefícios:
Usa as mesmas credenciais de autenticação que todos os outros comandos baseados
na CLI gcloud, que são provenientes do fluxo padrão gcloud auth login
.
.
É compatível com o ambiente flexível do App Engine.
Atualiza o servidor de desenvolvimento local automaticamente como parte do fluxo padrão de atualização
da CLI gcloud.
É compatível com a implantação das configurações de serviço do App Engine (cron, filas, DoS, expedição), independentemente do serviço.
Diferenças significativas
Antes de migrar, esteja ciente destas diferenças significativas:
- Dependência da CLI gcloud
- O plug-in antigo pode ser executado sem dependências de ambiente local específicas,
além do Java, mas o novo plug-in exige a instalação da
CLI gcloud.
- Sem geração de documentos de descoberta do Endpoints
- O novo plug-in não gera documentos de descoberta do Endpoints.
Esse recurso está disponível em um plug-in diferente. A execução do back-end do Endpoints não exige mais a geração desse arquivo em etapas de criação, já que agora ele é gerado pelo servidor no ambiente de execução. Use o novo plug-in somente se você precisar gerar bibliotecas de cliente para iOS ou Android, por exemplo. Saiba mais sobre os
novos plug-ins no guia Como migrar para o Endpoints Frameworks para
App Engine.
- O formato de arquivo EAR não é mais aceito
- O novo plug-in não é mais compatível com o
formato de arquivo EAR para executar e implantar vários serviços ao mesmo tempo.
- Novo comando de implantação
- O plug-in antigo chama o comando
appcfg
para implantar aplicativos, enquanto o novo plug-in faz a implantação usando a nova CLI do gcloud.
- O aprimoramento de JPA/JDO do DataNucleus precisa ser configurado manualmente
- Se seu projeto
usa o aprimoramento JPA/JDO do Datanucleus de
gradle-appengine-plugin
, é necessário
configurar manualmente o aprimoramento do Datanucleus depois de
mudar para o plug-in baseado na CLI gcloud. Veja um exemplo do Stackoverflow (em inglês).
- O Android Studio não é compatível
- É possível fazer com que seu projeto do Android Studio use o novo plug-in,
mas o servidor de desenvolvimento do App Engine do Android Studio e
o suporte à implantação não funcionarão com o novo plug-in. Para executar e implantar o aplicativo, é preciso invocar o Gradle diretamente.
O uso de arquivos de configuração XML é aceito, mas não YAML.
Como migrar para o novo plug-in
Remova a configuração e as importações antigas de gradle-appengine-plugin
do
seu arquivo build.gradle
.
Adicione o novo plug-in ao classpath
da seção buildscript
do
arquivo build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1'
}
}
Na raiz do serviço, execute o seguinte comando para verificar se é possível
executar o aplicativo localmente:
gradle appengineRun
Na seção buildscript
do arquivo build.gradle
, configure a
implantação especificando o código e a versão do projeto:
appengine {
deploy {
version = 'v1'
project = "your GCP project ID"
}
}
As novas ferramentas ignoram os elementos do aplicativo e da versão no
arquivo appengine-web.xml
.
Na raiz do serviço, execute o seguinte comando para verificar se é possível
implantar o aplicativo:
gradle appengineDeploy
Como migrar configurações multisserviço baseadas em EAR
O novo plug-in não é compatível com empacotamento EAR. Em vez disso, ele aceita a execução de vários serviços localmente sem qualquer etapa especial de empacotamento.
Para migrar o projeto do Gradle baseado em EAR:
Escolha um serviço principal que será responsável pela execução do resto dos serviços. Selecione um serviço padrão, que pode ser qualquer um dos serviços
executados em conjunto.
Na configuração appengine
, modifique a entrada run.services
para
incluir todos os serviços que precisam ser executados pelo servidor de desenvolvimento local.
Um exemplo de estrutura de projeto:
../{projectRoot}/
build.gradle
settings.gradle (includes default-service & secondary-service)
{your-default-service}/build.gradle {includes appengine-gradle-plugin}
….
{your-default-service}/src/main/webapp/WEB-INF/appengine-web.xml
{your-secondary-service}build.gradle {includes appengine-gradle-plugin}
….
{your-secondary-service}/src/main/webapp/WEB-INF/appengine-web.xml
Um exemplo de buildscript build.gradle
:
appengine {
run {
// configure the app to point to the right service directories
services = [
projectAsService(project),
projectAsService(":another-module")
]
}
}
// helper method to obtain correct directory and set up dependencies
def getExplodedAppDir(Project serverProject) {
// if not 'this' module, then do some setup.
if (serverProject != project) {
// make sure we evaluate other modules first so we get the right value
evaluationDependsOn(serverProject.path)
// make sure we build "run" depends on the other modules exploding wars
project.tasks.appengineRun.dependsOn serverProject.tasks.explodeWar
}
return serverProject.tasks.explodeWar.explodedAppDirectory
}
Comandos baseados no SDK do App Engine vs. comandos do Gradle baseados na CLI gcloud
Na tabela a seguir, mostraremos as diferentes maneiras de invocar o plug-in do Gradle, seja baseado na CLI gcloud.
Ação |
Baseado do SDK do App Engine |
Baseado na CLI do gcloud |
Executar o aplicativo localmente |
appengine:devserver |
appengineRun |
Implantar um novo aplicativo, versão ou serviço. |
appengine:update |
appengineDeploy |
Definir a versão padrão do aplicativo. |
appengine:set_default_version |
gcloud app services set-traffic ou gcloud app versions migrate |
Atualizar os cron jobs do aplicativo. |
appengine:update_cron |
appengineDeployCron |
Atualizar a configuração de expedição do aplicativo. |
appengine:update_dispatch |
appengineDeployDispatch |
Atualizar a configuração da proteção contra DoS do aplicativo. |
appengine:update_dos |
appengineDeployDos |
Atualizar as definições da fila de tarefas do aplicativo. |
appengine:update_queues |
appengineDeployQueue |
Atualizar os índices do armazenamento de dados. |
appengine:update_indexes |
appengineDeployIndex |
Excluir os índices não utilizados do aplicativo. |
appengine:vacuum_indexes |
limpeza de índices do armazenamento de dados da gcloud |
Inicia a versão de módulo especificada. |
appengine:start_module_version |
gcloud app versions start |
Parar a versão de módulo especificada. |
appengine:stop_module_version |
gcloud app versions stop |
Reverter uma atualização em andamento. |
appengine:rollback |
gcloud app versions start, gcloud app versions stop |
A seguir
- Agora que você migrou para o novo plug-in com sucesso, é possível testar
e implantar
o aplicativo.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-19 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Informações incorretas ou exemplo de código","incorrectInformationOrSampleCode","thumb-down"],["Não contém as informações/amostras de que eu preciso","missingTheInformationSamplesINeed","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-08-19 UTC."],[[["\u003cp\u003eMigrate from the Java App Engine SDK-based plugin (\u003ccode\u003ecom.google.appengine.appengine-gradle\u003c/code\u003e) to the gcloud CLI-based plugin (\u003ccode\u003ecom.google.cloud.tools.appengine-gradle\u003c/code\u003e) for enhanced benefits, including unified authentication, flexible environment support, and automatic updates.\u003c/p\u003e\n"],["\u003cp\u003eThe new gcloud CLI-based plugin requires the gcloud CLI to be installed and no longer supports Endpoints discovery doc generation within the plugin, as it's now handled at runtime, nor does it support the EAR file format for multiple services.\u003c/p\u003e\n"],["\u003cp\u003eManual configuration of Datanucleus enhancement is necessary if your project uses JPA/JDO, and Android Studio's built-in App Engine support is incompatible, requiring direct Gradle invocation.\u003c/p\u003e\n"],["\u003cp\u003eMigrating from EAR-based multi-service configurations to the new plugin involves selecting a primary service and configuring the \u003ccode\u003erun.services\u003c/code\u003e entry in your \u003ccode\u003ebuild.gradle\u003c/code\u003e to include all services for local development, replacing EAR packaging entirely.\u003c/p\u003e\n"],["\u003cp\u003eThe gcloud CLI-based plugin uses new Gradle commands like \u003ccode\u003eappengineRun\u003c/code\u003e for local development and \u003ccode\u003eappengineDeploy\u003c/code\u003e for deployment, replacing the old SDK-based commands such as \u003ccode\u003eappengine:devserver\u003c/code\u003e and \u003ccode\u003eappengine:update\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Migrating to the gcloud CLI-based Gradle plugin\n\nIf you previously used the Java App Engine SDK-based plugin\n(`com.google.appengine.appengine-gradle`) and want to move to the new\n[Google Cloud CLI](/sdk/downloads), migrate to the gcloud CLI-based\n(`com.google.cloud.tools.appengine-gradle`) plugin.\n\nBenefits of the gcloud CLI-based plugin\n---------------------------------------\n\nUpgrading to the new plugin provides the following benefits:\n\n- Uses the same authentication credentials as all other gcloud CLI\n -based commands, which are produced from the standard `gcloud auth login`\n flow.\n\n- Supports the App Engine flexible environment.\n\n- Updates the local development server automatically as part of the standard\n gcloud CLI update flow.\n\n- Supports deploying App Engine service (cron, queues, dos, dispatch)\n configurations, independently from your service.\n\nNotable differences\n-------------------\n\nBefore you migrate, be aware of these notable differences:\n\ngcloud CLI dependency\n: The old plugin runs without any specific local environment dependencies,\n besides Java, but the new plugin requires that you have the\n gcloud CLI installed.\n\nNo Endpoints discovery doc generation\n: The new plugin does not generate Endpoints discovery docs, a\n feature available in a separate plugin. Running your Endpoints\n backend no longer requires generating this file in a build step as the server\n now generates it at runtime. You should use the new plugin only if you need\n to generate client libraries such as for iOS or Android. Learn more about the\n new plugins by reviewing the [Migrating to Endpoints Frameworks for\n App Engine](/endpoints/docs/frameworks/legacy/v1/java/migrating)\n guide.\n\nEAR file format no longer supported\n: The new plugin no longer supports the\n EAR file format for running and deploying multiple services at the same time.\n\nNew deployment command\n: The old plugin calls the `appcfg` command to deploy\n applications, while the new plugin deploys using the new gcloud CLI.\n\nJPA/JDO Datanucleus enhancement must be manually configured\n: If your project\n uses the `gradle-appengine-plugin`'s JPA/JDO Datanucleus enhancement, you must\n manually configure Datanucleus enhancement after switching to the\n gcloud CLI-based plugin. See an [example from Stackoverflow](https://stackoverflow.com/questions/29279503/how-can-i-run-datanucleus-enhancer-from-gradle).\n\nAndroid Studio is not supported\n: You can switch your Android Studio project to use the new plugin, but the\n Android Studio App Engine development server and deployment support\n does not work with this new plugin. To run and deploy your app, you have to\n invoke Gradle directly.\n\nUse of XML configuration files is supported, but not YAML.\n\nMigrating to the new plugin\n---------------------------\n\n1. Remove the old `gradle-appengine-plugin` configuration and imports from your\n `build.gradle` file.\n\n2. Add the new plugin to the `classpath` of your `build.gradle` file's\n `buildscript` section:\n\n buildscript {\n repositories {\n mavenCentral()\n }\n\n dependencies {\n classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1'\n }\n }\n\n3. At the root of your service, run the following command to verify that you can\n run your app locally:\n\n gradle appengineRun\n\n4. In your `build.gradle` file's `buildscript` section, configure your\n deployment by specifying your project ID and version:\n\n appengine {\n deploy {\n version = 'v1'\n project = \"your GCP project ID\"\n }\n }\n\n The new tooling ignores the application and version elements in your\n `appengine-web.xml` file.\n5. At the root of your service, run the following command to verify that you can\n deploy your application:\n\n gradle appengineDeploy\n\nMigrating EAR based multi-service configurations\n------------------------------------------------\n\nThe new plugin does not support EAR packaging. Instead, it supports running\nmultiple services locally without any special packaging steps.\n\nTo migrate your EAR-based Gradle project:\n\n1. Pick a primary service that will be responsible for running the rest of the\n services. You should select your default service, but it can be any of the\n services that are run together.\n\n2. In your `appengine` configuration, modify the `run.services` entry to include\n all the services that should be run by the local development server.\n\n An example project structure: \n\n ../{projectRoot}/\n build.gradle\n settings.gradle (includes default-service & secondary-service)\n {your-default-service}/build.gradle {includes appengine-gradle-plugin}\n ....\n {your-default-service}/src/main/webapp/WEB-INF/appengine-web.xml\n {your-secondary-service}build.gradle {includes appengine-gradle-plugin}\n ....\n {your-secondary-service}/src/main/webapp/WEB-INF/appengine-web.xml\n\n An example `build.gradle` buildscript: \n\n appengine {\n run {\n // configure the app to point to the right service directories\n services = [\n projectAsService(project),\n projectAsService(\":another-module\")\n ]\n }\n }\n\n // helper method to obtain correct directory and set up dependencies\n def getExplodedAppDir(Project serverProject) {\n // if not 'this' module, then do some setup.\n if (serverProject != project) {\n // make sure we evaluate other modules first so we get the right value\n evaluationDependsOn(serverProject.path)\n // make sure we build \"run\" depends on the other modules exploding wars\n project.tasks.appengineRun.dependsOn serverProject.tasks.explodeWar\n }\n return serverProject.tasks.explodeWar.explodedAppDirectory\n }\n\nApp Engine SDK-based vs gcloud CLI-based Gradle commands\n--------------------------------------------------------\n\nThe following table shows the different ways you invoke the Gradle plugin,\ndepending on whether you use the App Engine SDK-based Gradle plugin or\nthe [gcloud CLI-based Gradle](/appengine/docs/legacy/standard/java/using-gradle)\nplugin.\n\nWhat's next\n-----------\n\n- Now that you have migrated to the new plugin successfully, you can [test](/appengine/docs/legacy/standard/java/using-gradle#testing_gradle_app) and [deploy](/appengine/docs/legacy/standard/java/using-gradle#deploying_gradle_app) your application."]]