AWS Developer Tools Blog

The AWS SDK for Java will no longer support Java 6

The AWS SDK for Java currently maintains two major versions: 1.11.x and 2.x. Customers on Java 8 or newer may use either 2.x or 1.11.x, and customers on Java 6 or newer may use 1.11.x.

Free updates to the Java 6 virtual machine (JVM) were stopped by Oracle on April 2013. Users that don’t pay for extended JVM support would need to upgrade their JVM to continue to receive any updates, including security updates. As of December 2018, Oracle no longer provided extended support for Java 6. Additionally Jackson, a popular library for JSON serialization, is used by the AWS SDK for Java and in July 2016, portions of the Jackson library that are used by the AWS SDK stopped supporting Java 6. Therefore, as of November 15, 2019, new versions of AWS SDK for Java 1.11.x will be released without support for Java version 6, and will instead require Java version 7 or newer. After this date, customers on Java 6 that upgrade their version of the AWS SDK for Java will receive “Java version mismatch” errors at runtime.

I’m currently using Java 6 and the AWS SDK for Java 1.11.x. What should I do?

We recommend moving to a Java 8 or newer runtime that still receives updates and promises long-term support. Here are some popular choices:

  1. Amazon Corretto 8 or 11
  2. Red Hat OpenJDK 8 or 11
  3. Oracle JDK 8 or 11
  4. AdoptOpenJDK 8 or 11

If you are not ready to update to a newer Java version, then you can pin your AWS SDK for Java version to one that supports Java 6, which will continue to work. However, you will no longer receive new service updates, bug fixes or security fixes.

Why will Java 6 no longer be supported?

As noted previously, free updates to the Java 6 virtual machine (JVM) were stopped by Oracle on April 2013. Free users would need to upgrade their JVM to continue to receive security updates. As of December 2018, Oracle no longer provides extended support for Java 6.

The AWS SDK for Java uses a small number of industry-standard dependencies. These dependencies provide the SDK with a larger feature set than would be possible if the functionality provided by these dependencies were to be developed in-house. Because Java 6 is now generally considered “unsupported”, many third party libraries have stopped supporting Java 6 as a runtime.

For example, Jackson, a popular library for JSON serialization, is used by the AWS SDK for Java as well as many other libraries in the Java ecosystem. In July 2016, portions of the Jackson library that are used by the AWS SDK stopped supporting Java 6. At the time, too many AWS customers would have been broken by removal of support for Java 6, and Jackson was too ingrained in the SDK’s public APIs to be removed without breaking a different set of customers. The AWS SDK for Java team froze the version of Jackson that they used and made sure that the Jackson features used by the SDK were not affected by known security issues.

Many things have changed since 2016, including: Java 6 is now generally considered “unsupported”, very few AWS customers use Java 6 on the updated AWS SDK for Java, and customers have begun to report that the old version of Jackson in their dependency graph is an issue. To maintain our customer focus, we will be raising the minimum Java version to Java 7 for the AWS SDK for Java and upgrading to use a newer version of Jackson.