The standalone App Engine SDK was deprecated as of July 30, 2019, and it is now shut down. The following table lists features and their recommended alternatives:
| Deprecated | Recommended action | 
|---|---|
| standalone App Engine SDK | Download Google Cloud CLI | 
| Access App Engine legacy APIs using the App Engine SDK | Migrate to an unbundled Google Cloud or third-party service, or access bundled services using the App Engine services SDK if you are using a second-generation runtime | 
| appcfgcommands | Migrate from AppCfg to gcloud command line | 
| dev_appserver.shcommands | For local development, run the java_dev_appserver.shcommand from the bin directory of gcloud CLI | 
| Java App Engine SDK-based plugin for Maven ( com.google.appengine.appengine-maven) | Migrate to the gcloud CLI-based Maven plugin | 
| Java App Engine SDK-based plugin for Gradle ( com.google.appengine.appengine-gradle) | Migrate to the gcloud CLI-based Gradle plugin | 
| cron.xml,datastore-index.xml,dispatch.xml, andqueue.xmlfile formats | Migrate automatically using the gcloud beta app migrate-configtool or migrate yourxmltoyamlfiles manually. | 
Migration timetable
July 30, 2019: The standalone App Engine SDK-based tooling is deprecated. August 30, 2020: The standalone App Engine SDK is not available for download and might not work, if used. August 30, 2020: Google shut down and removed support for the standalone App Engine SDK.
Backward non-compatible features
As a result of the shutdown of the appcfg tool and the standalone
App Engine SDK, the following features are currently not supported in
gcloud CLI:
- Downloads of your application's files with AppCfg.
Migrating XML to YAML file formats
gcloud CLI does not support the following file formats:
- cron.xml
- datastore-index.xml
- dispatch.xml
- queue.xml
The following examples demonstrate how to migrate your xml files to
yaml files.
Migrating your files automatically
To migrate your xml files automatically:
- You must have gcloud CLI version 226.0.0 or later. To update to the latest version: - gcloud components update
- For each file you'd like to migrate, specify one of the following subcommands ( - cron-xml-to-yaml,- datastore-indexes-xml-to-yaml,- dispatch-xml-to-yaml,- queue-xml-to-yaml) and file name:- gcloud beta app migrate-config queue-xml-to-yaml MY-QUEUE-XML-FILE.xml
- Manually double-check the converted file before deploying to production. - For a successful sample - xmlto- yamlfile conversion, see the Migrating your files manually tabs.
Migrating your files manually
To manually migrate your xml files to yaml files:
cron.yaml
Create a cron.yaml file with a cron object containing a list of objects,
each with fields that correspond to each of the <cron> tag attributes in
your cron.xml file, as shown below.
Converted cron.yaml file:
cron:
- url: '/recache'
  schedule: 'every 2 minutes'
  description: 'Repopulate the cache every 2 minutes'
- url: '/weeklyreport'
  schedule: 'every monday 08:30'
  target: 'version-2'
  timezone: 'America/New_York'
  description: 'Mail out a weekly report'
Original cron.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday 08:30</schedule>
    <timezone>America/New_York</timezone>
    <target>version-2</target>
  </cron>
</cronentries>
For more information, see the cron.yaml reference
documentation.
dispatch.yaml
Create a dispatch.yaml file with a dispatch object containing a list of
objects, each with fields that correspond to each of the <dispatch> tag
attributes in your dispatch.xml file, as shown below.
Converted dispatch.yaml file:
dispatch:
- url: '*/favicon.ico'
  module: default
- url: 'simple-sample.uc.r.appspot.com/'
  module: default
- url: '*/mobile/*'
  module: mobile-frontend
Original dispatch.xml file
<?xml version="1.0" encoding="UTF-8"?>
<dispatch-entries>
  <dispatch>
      <url>*/favicon.ico</url>
      <module>default</module>
  </dispatch>
  <dispatch>
      <url>simple-sample.uc.r.appspot.com/</url>
      <module>default</module>
  </dispatch>
  <dispatch>
      <url>*/mobile/*</url>
      <module>mobile-frontend</module>
  </dispatch>
</dispatch-entries>
For more information, see the dispatch.yaml reference
documentation
index.yaml
Create an index.yaml file with an indexes object containing a list of
objects, each with fields that correspond to each of the <datastore-index>
tag attributes in your datastore-indexes.xml file, as shown below.
Converted index.yaml file:
indexes:
- ancestor: false
  kind: Employee
  properties:
  - direction: asc
    name: lastName
  - direction: desc
    name: hireDate
- ancestor: false
  kind: Project
  properties:
  - direction: asc
    name: dueDate
  - direction: desc
    name: cost
Original datastore-index.xml file:
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
 autoGenerate="true">
   <datastore-index kind="Employee" ancestor="false">
       <property name="lastName" direction="asc" />
       <property name="hireDate" direction="desc" />
   </datastore-index>
   <datastore-index kind="Project" ancestor="false">
       <property name="dueDate" direction="asc" />
       <property name="cost" direction="desc" />
   </datastore-index>
</datastore-indexes>
For more information, see the index.yaml reference
documentation.
queue.yaml
Create a queue.yaml file with a queue object containing a list of
objects, each with fields that correspond to each of the <queue> tag
attributes in your queue.xml file, as shown below.
Converted queue.yaml file:
queue:
- name: fooqueue
  mode: push
  rate: 1/s
  retry_parameters:
    task_retry_limit: 7
    task_age_limit: 2d
- name: barqueue
  mode: push
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 200
    max_doublings: 0
Original queue.xml file:
<queue-entries>
  <queue>
    <name>fooqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <task-retry-limit>7</task-retry-limit>
      <task-age-limit>2d</task-age-limit>
    </retry-parameters>
  </queue>
  <queue>
    <name>barqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      <min-backoff-seconds>10</min-backoff-seconds>
      <max-backoff-seconds>200</max-backoff-seconds>
      <max-doublings>0</max-doublings>
    </retry-parameters>
  </queue>
<queue-entries>