Java Release Notes

In addition to the release notes below, you can also track known issues on the issue tracker.

December 14, 2017

Java runtime notes

  • Updated Java SDK to version 1.9.59.
  • Updated the local development server to set the url-stream-handler configuration parameter to native by default. This change reflects the behavior of the Java 8 runtime in production. For more information on url-stream-handler, see the appengine-web.xml reference.
  • Fixed the NoClassDefFoundError error that occurs when using the local development server with the Java 8 runtime and Endpoints Framework Gradle Plugin.
  • Fixed a local development server bug to resolve issues with servlet URLs that contain the colon character.

October 31, 2017

  • App Engine is now available in the asia-south1 region (Mumbai, India).

October 11, 2017

Java runtime notes

September 25, 2017

Java runtime notes

  • Updated Java SDK to version 1.9.57
  • The local development server no longer supports -Xbootclasspath/p and google_sql.jar in the path.
  • The Java 8 runtime no longer supports JDK9 JARs that contain module-info.class.
  • Cloud Endpoints v1 is no longer supported on the Java 8 runtime.
  • Fixed NoClassDefFoundError exception on the local development server when using Cloud Endpoints v2 on the Java 8 runtime.

September 18, 2017

Java runtime notes

  • Release 1.3.3 for
  • The local development server now logs output to dev_appserver.out. (#156)
  • datastore-indexes-auto.xml is no longer removed during non-clean rebuilds. (#165)
  • Switched to use sync instead of copy on the explodeWar task. (#162)

September 13, 2017

  • You can now use managed certificates to add SSL to your custom domain. Once you map your custom domain to your application, App Engine provisions an SSL certificate automatically and handles renewing the certificate before it expires and revoking it if you remove the custom domain. Managed certificates are in beta. For more information, see Securing Custom Domains with SSL.

  • If you have an existing domain mapping and SSL certificate, then it continues to function as expected. You can also upgrade to managed SSL certificates.

  • The gcloud commands and Admin API methods used to map custom domains are now generally available. This includes gcloud domains verify and apps.authorizedDomains.list. However, if you want to use managed SSL certificates, use the beta commands and methods that are specified in Securing Custom Domains with SSL.

September 11, 2017

Java runtime notes

  • Updated Java SDK to version 1.9.56

  • For flexible runtimes compatible with the App Engine standard environment APIs (compat runtimes), this SDK version includes updates to the appengine-web.xml file configuration to add support for subnetwork_name, session_affinity, and updated liveness and readiness health checks.

  • Added support for the environment variables GAE_RUNTIME (java 7 or java 8) and GAE_ENV (standard) in the Google App Engine SDK.

September 5, 2017

  • App Engine is now available in the southamerica-east1 region (São Paulo, Brazil).

August 1, 2017

  • App Engine is now available in the europe-west3 region (Frankfurt, Germany).

July 18, 2017

  • App Engine is now available in the australia-southeast1 region (Sydney, Australia).

June 28, 2017

What's New

Known Java 8 Runtime Limitations

  • The /tmp directory is writable. Files in /tmp will consume memory allocated to your instance.
  • Async Servlet 3.1 is not supported.
  • WebSocket is not supported.
  • The Jetty 9 configuration cannot be modified.
  • App Engine APIs can only be called from the thread that handles a web request or from threads created using ThreadManager
  • WEB-INF/appengine-web.xml must be used for configuration, app.yaml is not currently supported.
  • Deployment must be done through the Maven, Gradle, or IDE plugins.
  • If you create a thread pool using for example ExecutorService pool = Executors.newCachedThreadPool(ThreadManager.currentRequestThreadFactory()) then it must be shutdown down explicitly using pool.shutdown() before the current request terminates.
  • Previously it was possible to reference vendored classes like inadvertently when just org.joda.Instant was intended. The vendoring scheme has changed so code that did that no longer works.
  • Native network APIs (for example HttpURLConnection) are enabled for billed applications, but will return an exception ( or when used in free applications. Free applications can access * and, and they can also be configured to use the URLFetch service.
  • The google-cloud-java APIs need to be wrapped in an executor. See Pub/Sub Publisher hangs unless submitted through an executor.
  • Cloud Endpoints must be migrated from v1 to v2.
  • Channels and XMPP APIs are not supported.
  • appengine-labs-api.jar APIs are not supported resulting in Appstats for Java not being supported.
  • The Java 8 runtime default is to use the native Java HTTP(S) transport, not the URL Fetch transport, as is the case for Java 7 runtime. For more information, see url-stream-handler.

June 15, 2017

  • Updated Java SDK to version 1.9.54.

June 6, 2017

May 09, 2017

  • App Engine is now available in the us-east4 region (North Virginia).
  • Updated Java SDK to version 1.9.53.
  • Fixed a Java SDK issue where JSP tag library usage would not work with a Java 8 SpringBoot application.

May 8, 2017

  • Release 1.3.1 for
  • Running locally on development server will read and include environment variables from the appengine-web.xml configuration file.
  • Expose environment parameter for including additional environment variables through the maven/gradle configuration.

May 2, 2017

  • Release 1.3.0 for
  • Default development server is Dev App Server v1 (only java modules)
  • New gradle tasks for configuration deployment : appengineDeployCron, appengineDeployDispatch, appengineDeployDos, appengineDeployIndex, appengineDeployQueue
  • New maven goals for configuration deployment : appengine:deployCron, appengine:deployDispatch, appengine:deployDos, appengine:deployIndex, appengine:deployQueue
  • Staging flexible apps with maven/gradle only copies app.yaml into build/target directory. For deployment of configuration files, use src/main/appengine.
  • Gradle exploded app directory default changed from build/exploded-app to build/exploded-<module-name>

Apr 19, 2017

  • Updated Java SDK to version 1.9.52.
  • Better support for Java 8 standard environment alpha runtime.
  • Upgrade to Jetty 9.3.18 for the Java 8 alpha standard environment runtime.
  • Update the quickstart-web.xml processing to use the latest Jetty capabilities to better support Java 8 SpringBoot applications.
  • Fix local execution of multiple services located in directories ending with the same name.
  • Fix SDK error when booting a SpringBoot application.

Mar 29, 2017

Mar 21, 2017

  • Updated the to 1.1.1.
  • Fixed issue 108 with flexible environment deployments in multi-module Gradle projects failing.

Mar 6, 2017

  • Updated the to 1.2.1.
  • Fixed issue 144 with custom deployable parameters incorrectly adding in extra directory.

Mar 1, 2017

  • Updated Java SDK to version 1.9.50.

  • Added support for testing multiple services with the local development server.

  • Stop generating a web.xml file for apps that use the Java 7 runtime and include a web.xml that specifies the servlet 3.1 schema.
  • Package Java class files in the .zip files even if the application does not have JSPs.

Feb 17, 2017

Updated the maven (1.2.0) and gradle (1.1.0) plugins for App Engine:

  • Added clearDatastore flag for clearing the local datastore upon startup.
  • Added source-context tasks/goals.

Jan 30, 2017

  • Updated Java SDK to version 1.9.49.

Dec 1, 2016

  • Updated Java SDK to version 1.9.48.

Nov 3, 2016

  • Version 1.9.45 was skipped.

  • Updated Java Runtime and SDK to version 1.9.46.

Oct 27, 2016

  • The Channel and XMPP services are now deprecated. These services will be turned down on October 31, 2017.

Oct 17, 2016

  • Updated Java Runtime and SDK to version 1.9.44.

  • Add new BlobInfo property, which is set when a Blobstore blob is stored in a Cloud Storage bucket.

Aug 1, 2016

Admin API notes

  • Version 1 of the Admin API is now generally available.

Aug 1, 2016 - Version 1.9.42

  • Version 1.9.41 was skipped.

  • Version 1.9.42 includes general bug fixes and improvements.

July 21, 2016

Java runtime notes

  • Fixes potentially incorrect reported memory usage in the App Engine dashboard (the values under Instance "Average Memory" and the "Memory Usage" graph). This issue does not affect billing.

July 18, 2016 - Version 1.9.40

  • Version 1.9.39 was skipped.

  • LeaseTasksByTag requests will be limited to 25 requests per second.

  • Server Errors and Client Errors now more accurately reflect per-URL status errors in the App Engine dashboard.

  • New App Engine guided walkthrough in the GCP Console. Pick your preferred language and launch an interactive tutorial directly in the console.

  • Increases the maximum cron tasks limit to 250.

Java runtime notes

  • All Java applications will be automatically upgraded to use the 64-bit version of the Java runtime. This rolling upgrade will start on July 20, 2016.

July 1, 2016

Cloud Datastore

May 25, 2016 - Version 1.9.38

  • The error returned by URL Fetch for a request to a port outside of the permitted ranges (80-90, 440-450, 1024-65535) will now always return INVALID_URL as documented.

Cloud Datastore

  • When committing a cross-group transaction, version numbers returned for new or updated entities are all the same. With the previous behavior, entities within the same group committed as part of a cross-group transaction, had the same version number, but entities in different groups might have had different version numbers. This change ensures all new and updated entities have an identical version number, regardless of their entity group, when committed as part of a cross-group transaction. As before, entities that are not updated will not have a new version number.

May 4, 2016 - Version 1.9.37

Includes general bug fixes and improvements.

May 2, 2016

App Engine flexible environment

  • The Ruby runtime is now available for the App Engine flexible environment.

April 18, 2016 - Version 1.9.36

In response to your requests, the App Engine Users API joins the rest of App Engine in supporting IAM roles and group expansion. This means that any user who is a project Owner, Editor or Viewer or an App Engine Admin is considered an "admin" by the Users API, regardless of whether the user was granted the role directly or by membership in a group. * This release populates error details, when available, in error messages associated with the "OverQuota" exception type.

Java runtime notes

  • Google no longer accepts quota increase requests for the mail service. Customers should use Sendgrid instead.

March 24, 2016 - Version 1.9.35

Java runtime notes

  • This release does not include a new Java SDK. Java users should continue to use the 1.9.34 SDK.

March 16, 2016

Java runtime notes

  • Version 1.9.34 of the Java SDK is available.

March 4, 2016 - Version 1.9.34

  • Increases default quota for URL fetch for billed apps. Refer to the Quotas page for details.

Java runtime notes

  • This release does not include a new Java SDK. Java users should continue to use the 1.9.32 SDK.

February 17, 2016 - Version 1.9.33

  • The URL path "/form" is now allowed and will be forwarded to applications. Previously, this path was blocked.

Java runtime notes

  • This release does not include a new Java SDK. Java users should continue to use the 1.9.32 SDK.

February 3, 2016 - Version 1.9.32

  • Container construction choices for Managed VMs

    The gcloud preview app deploy (and mvn gcloud:deploy) commands upload your artifacts to our servers and build a container to deploy your app to the Managed VM environment.

    There are two mechanisms for building the container image remotely. The default behavior is to build the container on a transient Compute Engine Virtual Machine which has Docker installed. Alternatively, you can use the Container Builder service, which is in Beta. To use the Container Builder service, follow these steps:

    1. Activate the Container Builder API for your project.
    2. Use the command gcloud config set app/use_cloud_build True. This will cause all invocations of gcloud preview app deploy to use the service. (To return to the default behavior, use the command gcloud config set app/use_cloud_build False.

Java runtime notes

  • Improved exception handling for the low-level API for Datastore, Transaction.rollback(). Instead of an exception, it generates an INFO log message when an operation associated with the transaction has failed.

January 14, 2016 - Version 1.9.31

App Engine now supports Google Groups: Adding a Google Group as a member of a project grants the members of the group access to App Engine. For example, if a Google Group is an Editor on a project, all members of the group now have Editor access to the App Engine application.

November 30, 2015 - Version 1.9.30

Headers for push queue requests made for Task Queue tasks with no payload will now contain a Content-Length entry set to '0'. Previously headers for such requests contained no Content-Length entry.

November 30, 2015 - Version 1.9.29

  • Stop calculating and storing queue depth for non-existent queues, queues marked for deletion, and in the case of queue table outages.
  • For developers using the endpoints API, added a discoverable boolean parameter to the @Api annotation to allow users to disable API discovery. Using this feature will prevent some client libraries (e.g. JavaScript) and the API Explorer from working, as they depend on discovery.

October 29, 2015 - Version 1.9.28

The Prospective Search API, which was deprecated on July 14, 2015, is now restricted to existing users. It will fully shutdown on December 1, 2015. * Improved accuracy of Geo filtering in Search queries.

Java runtime notes

  • Disabled Files API in the Java DevAppServer.

September 25, 2015 - Version 1.9.27

Applications that are newly enabled for billing now default to an unlimited daily budget, and no longer default to a maximum daily budget of $0. This prevents unwanted outages due to running out of budget. To set a ceiling on your application's daily cost, after you enable billing, set a budget in the app engine settings. For more information, see Setting a daily budget.


  • Bugfix: Repeated numeric facets are now allowed.
  • Faceted Search is now GA.

August 27, 2015 - Version 1.9.26

  • oauth2client library upgraded to version 1.4.2
  • Adds "show in context" menu for MVM application logs that have thread_id or request_id as a field in their log entry. This allows sorting app logs based on either field.
  • Capability to provision applications for current load and configure elastic provisioning based on both VM and application level metrics.
  • Remote API can now be accessed using OAuth2 credentials using
  • Use RequestPayloadTooLargeException for URLFetch requests with payloads that are too large.

Java runtime notes

  • Java's URLFetch API gains a property to specify default fetch deadline. appengine.api.urlfetch.defaultDeadline is a floating point number in seconds that can be used to specify a default URLFetch timeout for Java in appengine-web.xml.

August 14, 2015 - Version 1.9.25

  • Added PyAMF version 0.7.2 (Beta).
  • Admin Console menus start redirecting to GCP Console. Select services such as the Admin Logs will continue to be available in the Admin Console.
  • Datastore now allows properties to represent the empty list.
  • Failed tasks in queues configured with a ‘retry_limit’ of zero will no longer be retried.

Send feedback about...

App Engine standard environment for Java