App Engine Java 8 Runtime FAQ

The following questions apply to the App Engine Java 8 standard runtime.

Can I use Kotlin with the Java 8 runtime?

Yes, check out our Kotlin samples in the GitHub repository.

Can I use IntelliJ IDEA Community Edition with App Engine?

Yes, using the built-in Maven integration.

You can also use IntelliJ Ultimate Edition, which provides you with more web application development features and has tighter integration with the App Engine deployment process.

Does App Engine Cloud Endpoints v1.0 work in the Java 8 runtime?

No. You must migrate to Cloud Endpoints Frameworks version 2.0.

Why do I get java.lang.NoClassDefFoundError for repackaged classes?

Repackaged internal classes, such as com/google/appengine/repackaged/com/google/common/collect/ImmutableList, are not available anymore in the Java 8 runtime, even if they are defined in previous versions of the App Engine API JAR.

If you need to use the repackaged classes in your Java 8 app, set appengine.api.legacy.repackaging to true in the appengine-web.xml. For example:

<system-properties>
  <property name="appengine.api.legacy.repackaging" value="true">
</system-properties>

We recommend that you replace these classes with the public, non-repackaged classes.

Can I do traffic splitting between Java 8 and Java 11?

Yes, each service or module version can use a different runtime version, and traffic splitting is supported.

How are Java 8 threads treated when an instance isn't getting requests?

Threads created with App Engine APIs will continue to work as before.

Automatic Scaling Manual Scaling Basic Scaling
Instance terminates due to lack of requests. Instance terminates after the last request (default: 5 minutes) Runs forever.

What Metadata server features are supported in the App Engine Java 8 runtime?

The App Engine Java 8 runtime supports the following Metadata server urls:

/computeMetadata/v1/project/numeric-project-id (pending)
/computeMetadata/v1/project/project-id
/computeMetadata/v1/instance/zone
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email
/computeMetadata/v1/instance/service-accounts/default/scopes
/computeMetadata/v1/instance/service-accounts/default/token
/computeMetadata/v1/instance/service-accounts/{account}/aliases
/computeMetadata/v1/instance/service-accounts/{account}/email
/computeMetadata/v1/instance/service-accounts/{account}/scopes
/computeMetadata/v1/instance/service-accounts/{account}/token

Metadata Server v1beta1

The v1beta1 Metadata server is deprecated and scheduled for shutdown. Ensure that you update all requests to use v1 or newer. For more information, see Transitioning to the v1 metadata server endpoint.

/computeMetadata/v1beta1/project/numeric-project-id  (pending)
/computeMetadata/v1beta1/project/project-id
/computeMetadata/v1beta1/instance/zone
/computeMetadata/v1beta1/instance/service-accounts/default/aliases
/computeMetadata/v1beta1/instance/service-accounts/default/email
/computeMetadata/v1beta1/instance/service-accounts/default/scopes
/computeMetadata/v1beta1/instance/service-accounts/default/token
/computeMetadata/v1beta1/instance/service-accounts/{account}/aliases
/computeMetadata/v1beta1/instance/service-accounts/{account}/email
/computeMetadata/v1beta1/instance/service-accounts/{account}/scopes
/computeMetadata/v1beta1/instance/service-accounts/{account}/token

Why do my requests fail to respond?

If you create a thread pool on a request, you must make sure that you explicitly shut it down before the current request terminates.