Java 8 ha raggiunto la fine del supporto
e verrà
ritirato
il 31 gennaio 2026. Dopo il ritiro, non potrai eseguire il deployment di applicazioni Java 8, anche se la tua organizzazione ha utilizzato in precedenza un criterio dell'organizzazione per riattivare i deployment di runtime legacy. Le tue applicazioni Java 8 esistenti continueranno a essere eseguite e a ricevere traffico dopo la
data di ritiro. Ti consigliamo di
eseguire la migrazione all'ultima versione supportata di Java.
Migrazione al plug-in Gradle basato sull'interfaccia a riga di comando gcloud
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Se in precedenza utilizzavi il plug-in basato su Java App Engine SDK
(com.google.appengine.appengine-gradle
) e vuoi passare al nuovo
Google Cloud CLI, esegui la migrazione al plug-in basato su gcloud CLI
(com.google.cloud.tools.appengine-gradle
).
Vantaggi del plug-in basato sull'interfaccia a riga di comando gcloud
L'upgrade al nuovo plug-in offre i seguenti vantaggi:
Utilizza le stesse credenziali di autenticazione di tutti gli altri comandi basati su gcloud CLI, che vengono generati dal flusso gcloud auth login
standard.
Supporta l'ambiente flessibile di App Engine.
Aggiorna automaticamente il server di sviluppo locale nell'ambito del flusso di aggiornamento standard della CLI gcloud.
Supporta il deployment delle configurazioni del servizio App Engine (cron, code, dos, invio), indipendentemente dal servizio.
Differenze significative
Prima di eseguire la migrazione, tieni presente queste differenze significative:
- dipendenza dell'interfaccia a riga di comando gcloud
- Il vecchio plug-in viene eseguito senza dipendenze specifiche dell'ambiente locale, oltre a Java, ma il nuovo plug-in richiede l'installazione dell'interfaccia a riga di comando gcloud.
- Nessuna generazione di documenti di rilevamento di Endpoints
- Il nuovo plug-in non genera documenti di rilevamento degli endpoint, una funzionalità disponibile in un plug-in separato. L'esecuzione del backend di Endpoints non richiede più la generazione di questo file in un passaggio di compilazione, poiché ora il server lo genera in fase di esecuzione. Devi utilizzare il nuovo plug-in solo se devi generare librerie client, ad esempio per iOS o Android. Scopri di più sui nuovi plug-in consultando la guida Eseguire la migrazione ai framework Endpoints per App Engine.
- Il formato file EAR non è più supportato
- Il nuovo plug-in non supporta più il formato file EAR per l'esecuzione e il deployment di più servizi contemporaneamente.
- Nuovo comando di deployment
- Il vecchio plug-in chiama il comando
appcfg
per eseguire il deployment delle applicazioni, mentre il nuovo plug-in esegue il deployment utilizzando la nuova interfaccia a riga di comando gcloud.
- Il miglioramento Datanucleus JPA/JDO deve essere configurato manualmente
- Se il tuo progetto utilizza il miglioramento JPA/JDO Datanucleus di
gradle-appengine-plugin
, devi configurare manualmente il miglioramento Datanucleus dopo il passaggio al plug-in basato sulla CLI gcloud. Guarda un esempio di Stackoverflow.
- Android Studio non è supportato
- Puoi impostare il progetto Android Studio in modo che utilizzi il nuovo plug-in, ma il supporto per il server di sviluppo e il deployment di App Engine di Android Studio non funziona con questo nuovo plug-in. Per eseguire ed eseguire il deployment dell'app, devi invocare direttamente Gradle.
L'utilizzo di file di configurazione XML è supportato, ma non YAML.
Migrazione al nuovo plug-in
Rimuovi la vecchia configurazione e le importazioni gradle-appengine-plugin
dal file build.gradle
.
Aggiungi il nuovo plug-in alla sezione buildscript
del file build.gradle
:classpath
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.0.1'
}
}
Nella directory principale del servizio, esegui il seguente comando per verificare di poter eseguire l'app localmente:
gradle appengineRun
Nella sezione buildscript
del file build.gradle
, configura il deployment specificando l'ID progetto e la versione:
appengine {
deploy {
version = 'v1'
project = "your GCP project ID"
}
}
I nuovi strumenti ignorano gli elementi di applicazione e versione nel file appengine-web.xml
.
Nella directory principale del servizio, esegui il seguente comando per verificare di poter eseguire il deployment dell'applicazione:
gradle appengineDeploy
Migrazione di configurazioni multiservizio basate su EAR
Il nuovo plug-in non supporta il packaging EAR. Supporta invece l'esecuzione di più servizi localmente senza alcuna procedura di imballaggio speciale.
Per eseguire la migrazione del progetto Gradle basato su EAR:
Scegli un servizio principale che sarà responsabile dell'esecuzione del resto dei servizi. Devi selezionare il servizio predefinito, ma può essere qualsiasi servizio eseguito insieme.
Nella configurazione appengine
, modifica la voce run.services
in modo da includere tutti i servizi che devono essere eseguiti dal server di sviluppo locale.
Un esempio di struttura di progetto:
../{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
Un buildscript build.gradle
di esempio:
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
}
Comandi Gradle basati su SDK App Engine e comandi Gradle basati sull'interfaccia a riga di comando gcloud
La tabella seguente mostra i diversi modi per richiamare il plug-in Gradle,
a seconda che tu utilizzi il plug-in Gradle basato sull'SDK App Engine o il plug-in
Gradle basato sulla CLI gcloud.
Azione |
Basato sull'SDK di App Engine |
Basato sull'interfaccia a riga di comando gcloud |
Esegui l'app localmente |
appengine:devserver |
appengineRun |
Esegui il deployment di una nuova app, versione o servizio. |
appengine:update |
appengineDeploy |
Imposta la versione dell'applicazione predefinita. |
appengine:set_default_version |
gcloud app services set-traffic o gcloud app versions migrate |
Aggiorna i cron job dell'applicazione. |
appengine:update_cron |
appengineDeployCron |
Aggiorna la configurazione di invio dell'applicazione. |
appengine:update_dispatch |
appengineDeployDispatch |
Aggiorna la configurazione della protezione DoS dell'applicazione. |
appengine:update_dos |
appengineDeployDos |
Aggiorna le definizioni della coda di attività dell'applicazione. |
appengine:update_queues |
appengineDeployQueue |
Aggiorna gli indici Datastore. |
appengine:update_indexes |
appengineDeployIndex |
Elimina gli indici inutilizzati dall'applicazione. |
appengine:vacuum_indexes |
gcloud datastore indexes cleanup |
Avvia la versione del modulo specificata. |
appengine:start_module_version |
gcloud app versions start |
Interrompi la versione del modulo specificata. |
appengine:stop_module_version |
gcloud app versions stop |
Esegui il rollback di un aggiornamento in corso. |
appengine:rollback |
gcloud app versions start, gcloud app versions stop |
Passaggi successivi
- Ora che hai eseguito correttamente la migrazione al nuovo plug-in, puoi
testare e
implementare
la tua applicazione.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-09-04 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 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."]]