How to install Azure Command Launcher for Java

The Azure Command Launcher for Java is available on Linux for both x64 and arm64. The supported installation methods are:

Container images

The tool is included in the container images for the Microsoft Build of OpenJDK. No more setup is necessary.

For example, the following Dockerfile uses jaz to run a Java application from a jar file:

# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu

# Add your application.jar
COPY application.jar /application.jar

# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]

Install on Azure Linux

For virtual machines and other Azure Linux environments, you can install the tool by using the tdnf package manager. Install the jaz package with the following command:

sudo tdnf install jaz

Other Linux distributions

If you already set up the Linux Software Repository for Microsoft Products, run the appropriate package manager command for your distribution to install the jaz package.

For example, on Ubuntu or Debian-based distributions, run:

sudo apt-get install jaz

If you don't have the Linux Software Repository for Microsoft Products set up, follow the instructions for your Linux distribution.

To install on Ubuntu, open a terminal and run the following commands:

wget "https://packages.microsoft.com/config/ubuntu/$(. /etc/os-release; echo $VERSION_ID)/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb && \
  sudo dpkg -i packages-microsoft-prod.deb

After the repository is added, install jaz by running the following commands:

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install jaz

Certified JDK versions

The Azure Command Launcher for Java requires an OpenJDK-based JDK installation (version 8 or later) on the system.

Important

The Azure Command Launcher for Java requires a full JDK installation. It's not fully tested with JRE-only installations or custom jlink runtimes. For more information, see "Why doesn't it work with JRE or jlink runtimes?".

The Azure Command Launcher for Java is certified with the following JDKs, which receive the full set of tuning adjustments and optimizations on both x64 and arm64:

With other OpenJDK-based JDKs, the tool does its best to launch your application but might not apply the full set of tuning adjustments or version-specific optimizations. Some optimizations are also specific to Microsoft Build of OpenJDK and aren't applied to other distributions.

When the tool detects a JDK that isn't certified, it prints the following warning to standard error and continues to launch your application:

jaz: WARNING: Detected a version of Java that has not been certified by jaz.

For best results, use one of the certified JDKs listed earlier.

Configuration

The jaz command doesn't consume any command-line arguments for its own configuration. Instead, by default, it passes all arguments directly to the java command. To ensure that jaz configuration doesn't interfere with your application's arguments, jaz only accepts configuration via environment variables.

You can configure the jaz command by using these environment variables:

Environment variable Description
JAZ_HELP Set to 1 to print a help message and exit with code 0.
JAZ_PRINT_VERSION Set to 1 to print the jaz version to stdout and exit with code 0.
JAZ_DRY_RUN Set to 1 to print the java command that would be executed and exit with code 1.
JAZ_BYPASS Set to 1 to bypass jaz optimization adjustments. No effect on telemetry.
JAZ_IGNORE_USER_TUNING Set to 1 to ignore all user-provided tuning flags and apply jaz tuning instead. Otherwise, jaz only tunes the JVM if it detects no user-provided tuning flags. See "What happens if I already set some JVM options in my environment?" for more information about how jaz behaves with and without enabling this setting.
JAZ_EXIT_WITHOUT_FLUSH Set to 1 to skip flushing telemetry on exit. This setting avoids potential delays (up to 30 seconds) jaz might introduce while flushing data, however jaz might still send telemetry.

Using environment variables rather than command-line arguments also makes it easier to configure jaz in some cases. When deploying a containerized application, it's sometimes easier to set environment variables than modify launch scripts. Experimenting with JAZ_IGNORE_USER_TUNING and JAZ_BYPASS might be useful when evaluating jaz.