This documentation provides information for developers to set up their environment and build their project from sources.
To check that your development environment is properly set up to build the project, from the project root run on macOS or Linux:
./setup.shor on Windows:
.\setup.ps1Your output should look something like the following:
ℹ️ Checking required JVM:
✅ JAVA_HOME is set to /Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home.
ℹ️ Other JDK versions will be automatically downloaded by Gradle toolchain resolver.
ℹ️ Checking git configuration:
✅ The git command line is installed.
✅ pre-commit hook is installed in repository.
✅ git config submodule.recurse is set to true.
✅ All git submodules are initialized.
ℹ️ Checking Docker environment:
✅ The docker command line is installed.
✅ The Docker server is running.
If there is any issue with your output, check the requirements above and use the following guide to install and configure the required tools.
Requirements to build the full project:
- The
gitcommand line must be installed. - A container runtime environment must be available to run all tests (e.g. Docker Desktop).
Gradle auto-provision needed JDKs locally. However, it still is possible to manage the JDK via other tools.
The following steps demonstrate how to use brew, but other version managers
such as mise or sdkman work as well.
-
Install the required JDKs using
brew:brew install --cask zulu@8 zulu@11 zulu@17 zulu@21 zulu@25
and if GraalVM is needed (17, 21, 25)
brew install graalvm/tap/graalvm-community-java17 graalvm/tap/graalvm-community-jdk21 graalvm/tap/graalvm-community-jdk25
-
Identify your local version of GraalVM:
ls /Library/Java/JavaVirtualMachines | grep graalvmExample:
graalvm-community-openjdk-17Use this version in the following command to fix the GraalVM installation by removing the quarantine flag, e.g. :
xattr -r -d com.apple.quarantine "/Library/Java/JavaVirtualMachines/graalvm-community-openjdk-17" -
Restart your shell after applying the changes if you appended the command to your shell configuration file.
Note
ARM users: there is no Oracle JDK v8 for ARM. It's recommended to use Azul's Zulu builds of Java 8. Amazon Corretto builds have also been proven to work.
Note
macOS users: remember that /usr/libexec/java_home may control which JDK is in your path.
Use your JDK manager (mise, sdkman, etc.) or manually install the required JDKs.
-
Download and extract JDK 8, 11, 17, 21, and 25 from Eclipse Temurin releases and GraalVM 17 from Oracle downloads.
-
Install the GraalVM native image requirements for native builds by following the GraalVM official documentation.
-
Add the
JAVA_HOMEenvironment variable to your shell using theexportcommand. You can permanently set it by appending theexportcommand to your shell configuration file~/.zshrcor~/.bashrcor other.export JAVA_HOME=/<path to extracted archive>/jdk-21.<current version of JDK 21>
Gradle should automatically detect the JDK in usual places. As a fallback it can automatically provision them.
-
Restart your shell after applying the changes if you appended the commands to your shell configuration file.
-
Download and install JDK 8, 11, 17, 21, and 25 from Eclipse Temurin releases.
Alternatively, install JDKs using winget or scoop. (click here to expand)
winget install --id EclipseAdoptium.Temurin.8.JDK winget install --id EclipseAdoptium.Temurin.11.JDK winget install --id EclipseAdoptium.Temurin.17.JDK winget install --id EclipseAdoptium.Temurin.21.JDK winget install --id EclipseAdoptium.Temurin.25.JDK
scoop bucket add java scoop install temurin8-jdk scoop install temurin11-jdk scoop install temurin17-jdk scoop install temurin21-jdk scoop install temurin25-jdk
-
Set the
JAVA_HOMEenvironment variable, replacing the path with your JDK 21 installation:[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot", [EnvironmentVariableTarget]::User)
Gradle should automatically detect the JDK in usual places. As a fallback it can automatically provision them.
You can trigger the installation by running any git command from the terminal, e.g. git --version.
If not installed, the terminal will prompt you to install it.
apt-get install gitDownload and install the installer from the official website.
Alternatively, install git using winget or scoop. (click here to expand)
winget install --id git.gitscoop install gitNote
Docker Desktop is the recommended container runtime environment, but you can use any other environment to run testcontainers tests. Check the testcontainers container runtime requirements for more details.
Download and install Docker Desktop from the official website:
https://docs.docker.com/desktop/setup/install/mac-install/
Download and install Docker Desktop from the official website:
https://docs.docker.com/desktop/setup/install/linux/
Download and install Docker Desktop from the official website:
https://docs.docker.com/desktop/setup/install/windows-install/
Alternatively, install Docker Desktop using winget. (click here to expand)
winget install --id Docker.DockerDesktop- Get a copy of the project by cloning the repository using git in your workspace:
git clone --recurse-submodules git@github.com:DataDog/dd-trace-java.git
- There is a pre-commit hook setup to verify formatting before committing. It can be activated with the following command:
cd dd-trace-java cp .githooks/pre-commit .git/hooks/
Tip
You can alternatively use the core.hooksPath configuration to point to the .githooks folder using git config --local core.hooksPath .githooks if you don't already have a hooks path defined system-wide.
Note
The git hooks will check that your code is properly formatted before commiting. This is done both to avoid future merge conflict and ensure uniformity inside the code base.
- Configure git to automatically update submodules.
git config --local submodule.recurse true
Note
Git does not automatically update submodules when switching branches.
Without this configuration, you will need to remember to add --recurse-submodules to git checkout when switching to old branches.
Tip
This will keep the submodule in dd-java-agent/agent-jmxfetch/integrations-core up-to-date.
There is also an automated check when opening a pull request if you are trying to submit a module version change (usually an outdated version).
Note
Both git configurations (hooks and submodule) will only be applied to this project and won't apply globally in your setup.
Note
You can skip this step if you don’t need instrumentation for the akka-http-10.6 module. For background on why Akka now requires authentication, see this article.
To enable access to Akka artifacts hosted on Lightbend’s private repository, you’ll need to configure an authentication token.
- Obtain a repository token. Visit the Akka account page to generate a secure repository token.
- Set up the environment variable. Create an environment variable named:
ORG_GRADLE_PROJECT_akkaRepositoryToken=<your_token>After everything is properly set up, you can move on to the next section to start a build or check the contribution guidelines.
To build the project without running tests, run:
./gradlew clean assembleTo build the entire project with tests (this can take a very long time), run:
./gradlew clean buildNote
Running the complete test suite on a local development environment can be challenging. It may take a very long time, and you might encounter a few flaky tests along the way. It is recommended to only run the tests related to your changes locally and leave running the whole test suite to the continuous integration platform.
To build the JVM agent artifact only, run:
./gradlew :dd-java-agent:shadowJarAfter building the project, you can find the built JVM agent artifact in the dd-java-agent/build/libs folder.