Heroku Java Support
Last updated 19 November 2015
The Heroku Cedar stack is capable of running a variety of types of Java applications.
This document describes the general behavior of the Heroku Cedar stack as it relates to the recognition and execution of Java applications. General Java support on Heroku refers to the support for all frameworks except for Play. You can read about Play framework support in the Play framework support reference.
For framework specific tutorials visit:
You can also find template applications that can be cloned directly into your Heroku account at java.heroku.com
The default build system for Java application on Heroku is Maven. Heroku Java support for Maven will be applied to applications that contain a
When a deployed application is recognized as a Java application, Heroku responds with
-----> Java app detected.
$ git push heroku master -----> Java app detected
The following command is run to build your app:
$ mvn -B -DskipTests=true clean install
The maven repo is cached between builds to improve performance.
The following config vars will be set at first push:
PORT: HTTP port to which the web process should bind
DATABASE_URL: URL of the database connection
When a Java process is started on your dyno, the follow Java options will automatically be picked up:
These options are configured as part of the environment variable
JAVA_TOOL_OPTIONS, which is intended to augment a command line in environments where the command-line cannot be accessed or modified. If you need to override these settings you can either define your preferred options in the
Procfile command (which will take precedence), or set your own
JAVA_TOOL_OPTIONS config var.
Adjusting Environment for a Dyno Size
When a new dyno type is selected, the following settings are automatically added to
- free, hobby or standard-1x:
Monitoring Resource Usage
Additional JVM flags can be used to monitor resource usage in a dyno. The following flags are recommended for monitoring resource usage:
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+UseConcMarkSweepGC
See the troubleshooting article for more information about tuning a JVM process.
Supported Java versions
Heroku currently uses OpenJDK 8 to run your application default. OpenJDK version 7 is also available. Depending on the major version you select the latest available update of that Java runtime will be used each time you deploy your app.
Current versions are:
- Java 7 -
- Java 8 -
The JDK that your app uses will be included in the slug, which will affect your slug size.
Specifying a Java version
You can specify a Java version by adding a file called
system.properties to your application.
Set a property
java.runtime.version in the file:
Accepted values are 1.7 and 1.8. The default is 1.8 so if you’d like to use Java 8 you don’t need this file at all.
You can also pin your JDK update version by using a value such as this:
This will force the buildpack to install the specific version of the JDK. The supported update versions include:
However, we strongly encourage you to use the more general
1.8 format, which will automatically install any security updates.
Specifying a Maven version
You can also specify a Maven version with the
system.properties file by setting a
maven.version property like this:
Accepted values are 3.0.5, 3.1.1, 3.2.5 and 3.3.1. The default, if you do not specify a version, is 3.3.1. You will not be upgraded to a newer version automatically. If you are currently using 3.0.5 and want to upgrade to the latest version, then you must create the
system.properties file and specify the version.
Default web process type
web process type is defined for Java applications. See one of the Java tutorials for information on setting up your
A Postgres database is automatically provisioned for Java applications. This populates the DATABASE_URL environment variable.