Error while Deploying Appinventor (Using Appengine-java-sdk)

I run this command but it won't work.

appcfg.cmd -A projectId -V 1 update appengine/build/war

Error Log

dhana@DESKTOP-VJFLGMK MINGW64 ~/Desktop/appinventor-sources/appinventor (master)
$ appcfg.cmd -A projectId -V 1 update appengine/build/war
There is a new version of the SDK available.
Latest SDK:
Release: 1.9.84
Timestamp: Mon Nov 16 13:30:56 IST 2020
API versions: [1.0]

Your SDK:
Release: 1.9.36
Timestamp: Fri Mar 18 02:55:24 IST 2016
API versions: [1.0]

Please visit for the latest SDK.
Jan 30, 2021 1:04:45 PM <init>
WARNING: unable to change file permissions for everybody: C:\Users\dhana\.appcfg_oauth2_tokens_java
Please enter code: 4/1AY0e-g7jAsPrTq6Q1uc5ZiYbgrUsy4z3u_6zoDBlsBW1cR5bFjN4Bym9324
Reading application configuration data...
Bad configuration: XML error validating <?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="">

  <!-- Configure serving/caching of GWT files -->
    <include path="/companions/*" />
    <include path="/about/*" expiration="1d" />
    <include path="/static/**" />
    <include path="/static/fonts/*" expiration="365d">
      <http-header name="Content-Type" value="font/ttf" />
    <include path="/websiteassets/**" expiration="10s" />
    <include path="/Ya_tos_form.html" expiration="1d" />
    <include path="/favicon.ico" expiration="365d" />
    <include path="/templates/**" expiration="1d" />
    <include path="/reference/**" expiration="1d" />
    <include path="/robots.txt" expiration="30d" />

    <!-- These are not cached on purpose -->
    <include path="/ode/**.nocache.*" expiration="0s" />
    <include path="/index.html" expiration="0s" />

    <include path="/ode/**.cache.*" expiration="365d" />
    <exclude path="/ode/**.gwt.rpc" />

    <!-- don't serve the whitelist as a static file! -->
    <exclude path="/whitelist" />


  <!-- Permit sessions for location authentication -->
  <!-- Not any more -->

  <!-- Configuration and flags -->
    <property name="java.util.logging.config.file" value="WEB-INF/"/>

    <!-- note that the file: is necessary as part of the value for this property, because
         the log4j configuration is looking for a URL -->
    <property name="log4j.configuration" value="file:WEB-INF/"/>

    <!-- Set this to the IP Address or Host Name of the Rendezvous server.
         If left as the empty string, the default in YaVersion is used, which
         should be Note: You can specify both
         a name and a port using a colon to separate them. For example you can
         use to specify port 8888. Note: The rendezvous server
         is assumed to be a path "/rendezvous/" on the server. So specifying
         "" would mean the Rendezvous Server would be querired
         on -->

    <property name="use.rendezvousserver" value=""/>

    <!-- set to true if users should not be allowed to access the App
         Inventor server unless they are listed in the appengine/war/whitelist file -->
    <property name="use.whitelist" value="false"/>

    <!-- Name of storage bucket in Google Cloud Store -->
    <property name="gcs.bucket" value="" />
    <!-- Whether or not to use GCS for storage -->
    <property name="use.gcs" value="true" />

    <!-- set to true if users need to accept a Terms of Service the first time
      they access App Inventor -->
    <property name="require.tos" value="true" />

    <!-- Flags that select authentication method
         set auth.usegoogle to true to use Google Accounts
         set auth.uselocal to permit local users (username is email address) and password.
         If both are set, the login page will have a link to permit people to use
         their Google Account.
         It is an error for neither to be set. Instead of a login page, visitors
         to the site will receive an error page.

    <property name="auth.usegoogle" value="true" />
    <property name="auth.uselocal" value="true" />

    <!-- Flags associated with localauth code -->
    <property name="localauth.mailserver" value="" />
    <property name="localauth.mailserver.password" value="changeme" />

    <!-- host[:port] to use for connecting to the build server -->
    <property name="" value="localhost:9990" />

    <!-- We provide below for a second buildserver. If this field is
         non-empty then the user is presented a choice of two different
         build servers. This feature was introduced to support building
         against two different versions of the Android SDK. As of 8/1/2018
         MIT is using this feature with the first buildserver building Apps
         with a minSdk of 7 (but no targetSdk defined) to support older
         devices. The second buildserver is configured with a minSdk of 14
         and a targetSdk of 26 (along with the necessary component code
         changes). This is required for new Apps submitted to the Google
         Play Store. Having two buildservers provides us the flexibility to
         support older devices while also ensuring that people can submit
         MIT App Inventor created Apps to the Google Play Store.

    <!-- host[:port] to use for the second build server -->
    <property name="" value="" />

    <!-- host[:port] to tell build server the app host url to callback
         when deploy AppInventor on other GAE implementation such as
         AppScale.Keep it blank when deploy on GAE -->
    <property name="" value="" />

    <!-- Interval is seconds between checking for a message of the day.
         Set set to 0 to disable checking for a MOTD.  If you do enable
         MOTD checking, make the interval long, because this check is
         resource expensive on App Engine -->
    <property name="motd.check.interval.secs" value="0" />

    <!-- Set this to false if we should not send the Git build version with build requests.
         This is useful when testing new servers where we don't want to require the
         buildserver to match -->
    <property name="build.send.git.version" value="true" />

    <!-- Session Management Variables. -->
    <!-- We define three variables here.
         All variables are defined in minutes
         session.idletimeout - defines how long until an idle session
                               is considered invalid.
         session.renew       - defines the time after which a new session
                               cookie is generated.
         session.noop        - defines the time interval between no-op calls
                               from Ode. 0 means never perform a no-op (the default)

         Note: If renew is > idletimeout, then people will get logged
         out involuntarily after idletimeout because their session
         will never renew and therefore is considered idle.

    <property name="session.idletimeout" value="120" />
    <property name="session.renew" value="30" />
    <property name="session.noop" value="0" />

    <!-- Set this to true to enable the use of Wifi connections from the blocks editor to
         the phone. The phone must have an up-to-date copy of the MIT AICompanion App to
         use this feature. -->
    <property name="wifi.enabled" value="true" />

    <!-- Firebase Secret for the shared datastore -->
    <property name="firebase.secret" value="" />
    <property name="firebase.url" value="" />

    <property name="library.url" value="" />
    <property name="get_started.url" value="" />
    <property name="tutorials.url" value="" />
    <property name="extensions.url" value="" />
    <property name="troubleshooting.url" value="" />
    <property name="forums.url" value="" />
    <property name="feedback.url" value="" />
    <property name="release.notes.url" value="" />
    <property name="tos.url" value="/about/termsofservice.html" />
    <property name="logo.url" value="" />
    <property name="guide.url" value="" />
    <property name="reference.components.url" value="/reference/components/" />

    <!-- CloudDB secret keys -->
    <property name="clouddb.server" value=""/>
    <property name="clouddb.uuid.secret" value="changeme!"/>
    <property name="clouddb.secret" value="changeme too!" />

    <!-- This appears to be needed after a suspected change in how
         POSTs work with URLFetch around 09/20/2018 -->
    <property name="appengine.api.urlfetch.defaultDeadline" value="40"/>

    <!-- Supported maximum size of a project, in MB -->
    <!-- App Engine HTTP requests/responses are capped at 32 MB -->
    <property name="project.maxsize" value="30"/>

    <!-- So the calls to the buildserver can re-use connections -->
    <property name="http.keepAlive" value="true" />
    <property name="http.maxConnections" value="5" />


  <!-- Enable concurrency in the app engine server -->

 against C:\AppEngine\appengine-java-sdk-1.9.36\docs\appengine-web.xsd
  Caused by: cvc-complex-type.2.4.a: Invalid content was found starting with element '{"":runtime}'. One of '{"":source-language, "":module, "":service, "":instance-class, "":automatic-scaling, "":manual-scaling, "":basic-scaling, "":static-files, "":resource-files, "":system-properties, "":vm-settings, "":beta-settings, "":vm-health-check, "":health-check, "":resources, "":network, "":env-variables, "":ssl-enabled, "":sessions-enabled, "":async-session-persistence, "":user-permissions, "":public-root, "":inbound-services, "":precompilation-enabled, "":admin-console, "":static-error-handlers, "":warmup-requests-enabled, "":threadsafe, "":auto-id-policy, "":code-lock, "":vm, "":env, "":class-loader-config, "":url-stream-handler, "":use-google-connector-j, "":api-config}' is expected.
Please see the logs [C:\Users\dhana\AppData\Local\Temp\appcfg4721949423964930385.log] for further information.

C:\Users\dhana\AppData\Local\Temp\appcfg4721949423964930385.log file

appcfg4721949423964930385.txt (13.6 KB) (converted the file to txt format)

Sir @ewpatton , I am facing this error from too much time. Firstly I tried with Google Cloud but that also gives me a error. So, I move to Google App Engine. Please help me

appcfg is no longer supported by Google. You should switch to using the Google Cloud SDK.


Have you tried

Okay but Google Cloud SDK also not working for me.
It says that "Use jdk not jre"

Copy and paste the exact error message. No one can help you if you don't provide accurate information.

1 Like