- 
                Notifications
    You must be signed in to change notification settings 
- Fork 315
improve dev env setup documentation for Windows #8180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
    
  
     Merged
                    Changes from all commits
      Commits
    
    
            Show all changes
          
          
            21 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      fbd61ac
              
                add PowerShell scripts for Windows
              
              
                lucaspimentel 74f22b1
              
                fix typo and remove trailing whitespace in BUILDING.md
              
              
                lucaspimentel b48ff09
              
                add more Windows instructions, misc tweaks in BUILDING.md
              
              
                lucaspimentel 328979f
              
                more changes in BUILDING.md
              
              
                lucaspimentel 0b4160f
              
                use explicit value for JAVA_HOME instead of "%JAVA_8_HOME%"
              
              
                lucaspimentel 0265531
              
                Update install-jdks-windows.ps1
              
              
                lucaspimentel 72d1868
              
                move JDK install powershell script
              
              
                lucaspimentel dd63642
              
                update BUILDING.md
              
              
                lucaspimentel 80671d6
              
                add comments about GraalVM license
              
              
                lucaspimentel ac6aeaa
              
                add script descriptions
              
              
                lucaspimentel 8bc08dd
              
                add comment to explain "omit from toc"
              
              
                lucaspimentel b95f372
              
                move "Quick check" up
              
              
                lucaspimentel 146b0bd
              
                remove Windows install script for now
              
              
                lucaspimentel 5d19bff
              
                rewrite Windows sections to focus on manual installation
              
              
                lucaspimentel e0e97cd
              
                remove toc comments
              
              
                lucaspimentel 5b293fc
              
                more updates to Windows instructions
              
              
                lucaspimentel 5d757df
              
                fix formatting
              
              
                lucaspimentel 076f4aa
              
                simplify collapsible sections
              
              
                lucaspimentel edd3667
              
                tweak the "click here" text
              
              
                lucaspimentel 183c6a1
              
                add GraalVM version
              
              
                lucaspimentel 05774cd
              
                add GraalVM version
              
              
                lucaspimentel File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,19 +1,33 @@ | ||
|  | ||
| # Building | ||
|  | ||
| This documentation provides information for developers to set up their environment and build their project from sources. | ||
|  | ||
| * [Development environment quick check](#development-environment-quick-check) | ||
| * [Environment requirements quick check](#environment-requirements-quick-check) | ||
| * [Development environment set up](#development-environment-set-up) | ||
| * [Project build](#project-build) | ||
| * [Development environment](#development-environment) | ||
| * [Quick check](#quick-check) | ||
| * [Requirements](#requirements) | ||
| * [Install the required JDKs](#install-the-required-jdks) | ||
| * [Install git](#install-git) | ||
| * [Install Docker Desktop](#install-docker-desktop) | ||
| * [Clone the repository and set up git](#clone-the-repository-and-set-up-git) | ||
| * [Building the project](#building-the-project) | ||
|  | ||
| ## Development environment | ||
|  | ||
| ### Quick check | ||
|  | ||
| To check that your development environment is properly set up to build the project, from the project root run on macOS or Linux: | ||
| ```shell | ||
| ./setup.sh | ||
| ``` | ||
|  | ||
| ## Development environment quick check | ||
| or on Windows: | ||
| ```pwsh | ||
| .\setup.ps1 | ||
| ``` | ||
|  | ||
| To check that your development environment is properly set up to build the project, run `./setup.sh` from the project root. Your output should look something like the following. | ||
| Your output should look something like the following: | ||
|  | ||
| ```bash | ||
| $ ./setup.sh | ||
| ``` | ||
| ℹ️ Checking required JVM: | ||
| ✅ JAVA_HOME is set to /Users/datadog/.sdkman/candidates/java/8.0.402-zulu. | ||
| ✅ JAVA_8_HOME is set to /Users/datadog/.sdkman/candidates/java/8.0.402-zulu. | ||
|  | @@ -31,116 +45,174 @@ $ ./setup.sh | |
| ✅ The Docker server is running. | ||
| ``` | ||
|  | ||
| If there is any issue with your output, you can check the requirements and/or follow the guide below to install and configure the required tools. | ||
| If there is any issue with your output, check the requirements above and use the following guide to install and configure the required tools. | ||
|  | ||
| ## Environment requirements quick check | ||
| ### Requirements | ||
|  | ||
| Requirements to build the full project: | ||
|  | ||
| * The JDK versions 8, 11, 17 and 21 must be installed. | ||
| * The `JAVA_8_HOME`, `JAVA_11_HOME`, `JAVA_17_HOME`, `JAVA_21_HOME` and `JAVA_GRAALVM17_HOME` must point to their respective JDK location. | ||
| * The JDK-8 `bin` directory must be the only JDK on the PATH (e.g. `$JAVA_8_HOME/bin`). | ||
| * The `JAVA_8_HOME`, `JAVA_11_HOME`, `JAVA_17_HOME`, `JAVA_21_HOME`, and `JAVA_GRAALVM17_HOME` must point to their respective JDK location. | ||
| * The JDK 8 `bin` directory must be the only JDK on the PATH (e.g. `$JAVA_8_HOME/bin`). | ||
| * The `JAVA_HOME` environment variable may be unset. If set, it must point to the JDK 8 location (same as `JAVA_8_HOME`). | ||
| * The `git` command line must be installed. | ||
| * A container runtime environment must be available to run all tests (e.g. Docker Desktop). | ||
|  | ||
| ## Development environment set up | ||
|  | ||
| ### Install the required JDKs | ||
|  | ||
| **On MacOS:** | ||
| Download and install Eclipse Temurin JDK versions 8, 11, 17 and 21, and GraalVM 17. | ||
|  | ||
| * Install the required JDKs using `brew`. | ||
| `brew install --cask zulu@8 zulu@11 zulu@17 zulu@21 graalvm/tap/graalvm-ce-java17` | ||
| * Fix the GraalVM installation by [removing the quarantine flag](https://www.graalvm.org/latest/docs/getting-started/macos/). | ||
| `sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/graalvm-<current version of graalvm>` | ||
| #### macOS | ||
|  | ||
| * Install the required JDKs using `brew`: | ||
| ```shell | ||
| brew install --cask zulu@8 zulu@11 zulu@17 zulu@21 graalvm/tap/graalvm-ce-java17 | ||
| ``` | ||
| * Fix the GraalVM installation by [removing the quarantine flag](https://www.graalvm.org/latest/docs/getting-started/macos/): | ||
| ``` | ||
| sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/graalvm-<current version of graalvm> | ||
| ``` | ||
| * Add the required environment variables to your shell using the `export` command. You can permanently install the environment variables by appending the `export` commands into your shell configuration file `~/.zshrc` or `.bashrc` or other. | ||
| ```shell | ||
| export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home | ||
| export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home | ||
| export JAVA_17_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home | ||
| export JAVA_21_HOME=/Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home | ||
| export JAVA_GRAALVM17_HOME=/Library/Java/JavaVirtualMachines/graalvm-<current version of graalvm>/Contents/Home | ||
| export JAVA_HOME=$JAVA_8_HOME | ||
| ``` | ||
| ```shell | ||
| export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home | ||
| export JAVA_11_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home | ||
| export JAVA_17_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home | ||
| export JAVA_21_HOME=/Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home | ||
| export JAVA_GRAALVM17_HOME=/Library/Java/JavaVirtualMachines/graalvm-<current version of graalvm>/Contents/Home | ||
| export JAVA_HOME=$JAVA_8_HOME | ||
| ``` | ||
| * Restart your shell after applying the changes if you appended the commands to your shell configuration file. | ||
|  | ||
| > [!NOTE] | ||
| > ARM users: there is no Oracle JDK v8 for ARM. | ||
| > [!NOTE] | ||
| > ARM users: there is no Oracle JDK v8 for ARM. | ||
| > It's recommended to use [Azul's Zulu](https://www.azul.com/downloads/?version=java-8-lts&architecture=arm-64-bit&package=jdk#zulu) builds of Java 8. | ||
| > [Amazon Corretto](https://aws.amazon.com/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. | ||
| > macOS users: remember that `/usr/libexec/java_home` may control which JDK is in your path. | ||
|  | ||
| **On Linux:** | ||
| #### Linux | ||
|  | ||
| * Download and extract JDK 8, 11, 17 and 21 from [Eclipse Temurin releases](https://adoptium.net/temurin/releases/) and GraalVM from [Oracle downloads](https://www.graalvm.org/downloads/). | ||
| * Download and extract JDK 8, 11, 17, and 21 from [Eclipse Temurin releases](https://adoptium.net/temurin/releases/) and GraalVM 17 from [Oracle downloads](https://www.graalvm.org/downloads/). | ||
| * Install the GraalVM native image requirements for native builds by following [the GraalVM official documentation](https://www.graalvm.org/latest/reference-manual/native-image/#prerequisites). | ||
| * Add the required environment variables to your shell using the `export` command. You can permanently install the environment variables by appending the `export` commands into your shell configuration file `~/.zshrc` or `~/.bashrc` or other. | ||
| ```shell | ||
| export JAVA_8_HOME=/<path to extracted archive>/jdk8u<current version of JDK 8> | ||
| export JAVA_11_HOME=/<path to extracted archive>/jdk-11.<current version of JDK 11> | ||
| export JAVA_17_HOME=/<path to extracted archive>/jdk-17.<current version of JDK 17> | ||
| export JAVA_21_HOME=/<path to extracted archive>/jdk-21.<current version of JDK 21> | ||
| export JAVA_GRAALVM17_HOME=/<path to extracted archive>/graalvm-jdk-17.<current version of graalvm>/Contents/Home | ||
| export JAVA_HOME=$JAVA_8_HOME | ||
| ``` | ||
| * Add the required environment variables to your shell using the `export` command. You can permanently install the environment variables by appending the `export` commands into your shell configuration file `~/.zshrc` or `~/.bashrc` or other. | ||
| ```shell | ||
| export JAVA_8_HOME=/<path to extracted archive>/jdk8u<current version of JDK 8> | ||
| export JAVA_11_HOME=/<path to extracted archive>/jdk-11.<current version of JDK 11> | ||
| export JAVA_17_HOME=/<path to extracted archive>/jdk-17.<current version of JDK 17> | ||
| export JAVA_21_HOME=/<path to extracted archive>/jdk-21.<current version of JDK 21> | ||
| export JAVA_GRAALVM17_HOME=/<path to extracted archive>/graalvm-jdk-17.<current version of graalvm>/Contents/Home | ||
| export JAVA_HOME=$JAVA_8_HOME | ||
| ``` | ||
| * Restart your shell after applying the changes if you appended the commands to your shell configuration file. | ||
|  | ||
| **On Windows:** | ||
| #### Windows | ||
|  | ||
| * Download and install JDK 8, 11, 17, and 21 [Eclipse Temurin releases](https://adoptium.net/temurin/releases/). | ||
|  | ||
| <details> | ||
| <summary>Alternatively, install JDKs using winget or scoop. (click here to expand)</summary> | ||
|  | ||
| ```pwsh | ||
| 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 | ||
| ``` | ||
|  | ||
| * Download and install JDK 8, 11, 17 and 21 from [Eclipse Temurin releases](https://adoptium.net/temurin/releases/) and GraalVM from [Oracle downloads](https://www.graalvm.org/downloads/). | ||
| * Install the GraalVM native image requirements for native builds by following [the GraalVM official documentation](https://www.graalvm.org/latest/docs/getting-started/windows/#prerequisites-for-native-image-on-windows). | ||
| * Add the required environment variables. | ||
| * Open the *Start Menu*, type `environment variable`, and use the *Edit environment variable for your account* entry to open the *System Properties*. | ||
| * Add new entries to the table. | ||
| * `JAVA_8_HOME` to the JDK 8 installation folder, usually `C:\Program Files\Eclipse Adoptium\jdk-<current version of Java 8>-hotspot\bin` | ||
| * `JAVA_11_HOME`, `JAVA_21_HOME`, and `JAVA_21_HOME` similarly to their respective installation `bin` folders | ||
| * `JAVA_GRAALVM17_HOME` to the GraalVM installation folder, usually `C:\Program Files\Java\<current version of graalvm>\bin` | ||
| ```pwsh | ||
| scoop bucket add java | ||
| scoop install temurin8-jdk | ||
| scoop install temurin11-jdk | ||
| scoop install temurin17-jdk | ||
| scoop install temurin21-jdk | ||
| ``` | ||
|  | ||
| </details> | ||
|  | ||
| * To add the required environment variables, run the following PowerShell commands for each SDK version, replacing the paths with the correct version installed: | ||
| ```pwsh | ||
| [Environment]::SetEnvironmentVariable("JAVA_8_HOME", "C:\Program Files\Eclipse Adoptium\jdk-8.0.432.6-hotspot", [EnvironmentVariableTarget]::User) | ||
| [Environment]::SetEnvironmentVariable("JAVA_11_HOME", "C:\Program Files\Eclipse Adoptium\jdk-11.0.25.9-hotspot", [EnvironmentVariableTarget]::User) | ||
| [Environment]::SetEnvironmentVariable("JAVA_17_HOME", "C:\Program Files\Eclipse Adoptium\jdk-17.0.12.7-hotspot", [EnvironmentVariableTarget]::User) | ||
| [Environment]::SetEnvironmentVariable("JAVA_21_HOME", "C:\Program Files\Eclipse Adoptium\jdk-21.0.5.11-hotspot", [EnvironmentVariableTarget]::User) | ||
|  | ||
| # JAVA_HOME = JAVA_8_HOME | ||
| [Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Eclipse Adoptium\jdk-8.0.432.6-hotspot", [EnvironmentVariableTarget]::User) | ||
| ``` | ||
|  | ||
| ### Install git | ||
|  | ||
| **On MacOS:** | ||
| #### macOS | ||
|  | ||
| 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. | ||
|  | ||
| **On Linux:** | ||
| #### Linux | ||
|  | ||
| Run `apt-get install git`. | ||
| ```shell | ||
| apt-get install git | ||
| ``` | ||
|  | ||
| **On Windows:** | ||
| #### Windows | ||
|  | ||
| Download and install [the installer](https://git-scm.com/download/win) from the official website. | ||
| Download and install the installer from [the official website](https://git-scm.com/download/win). | ||
|  | ||
| ### Install Docker Desktop | ||
| <details> | ||
| <summary>Alternatively, install git using winget or scoop. (click here to expand)</summary> | ||
|  | ||
| Download and install Docker Desktop from the offical website for [MacOS](https://docs.docker.com/desktop/install/mac-install/), [Linux](https://docs.docker.com/desktop/install/linux-install/) or [Windows](https://docs.docker.com/desktop/install/windows-install/). | ||
| ```pwsh | ||
| winget install --id git.git | ||
| ``` | ||
|  | ||
| ```pwsh | ||
| scoop install git | ||
| ``` | ||
|  | ||
| </details> | ||
|  | ||
| ### Install Docker Desktop | ||
|  | ||
| > [!NOTE] | ||
| > 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](https://java.testcontainers.org/supported_docker_environment/) for more details. | ||
|  | ||
| ### Clone the repository and set up git | ||
| #### macOS | ||
|  | ||
| * Get a copy of the project. | ||
| * In your workspace, clone the repository using git. | ||
| ```bash | ||
| git clone --recurse-submodules [email protected]:DataDog/dd-trace-java.git | ||
| ``` | ||
| * Install the project git hooks. | ||
| * There is a pre-commit hook setup to verify formatting before committing. It can be activated with the following command. | ||
| ```bash | ||
| # On MacOS and Linux | ||
| cd dd-trace-java | ||
| cp .githooks/pre-commit .git/hooks/ | ||
|  | ||
| # On Windows | ||
| cd dd-trace-java | ||
| copy .githooks/pre-comit .git/hooks/ | ||
| Download and install Docker Desktop from the offical website:<br/> | ||
| https://docs.docker.com/desktop/setup/install/mac-install/ | ||
|  | ||
| #### Linux | ||
|  | ||
| Download and install Docker Desktop from the offical website:<br/> | ||
| https://docs.docker.com/desktop/setup/install/linux/ | ||
|  | ||
| #### Windows | ||
|  | ||
| Download and install Docker Desktop from the offical website:<br/> | ||
| https://docs.docker.com/desktop/setup/install/windows-install/ | ||
|  | ||
| <details> | ||
| <summary>Alternatively, install Docker Desktop using winget. (click here to expand)</summary> | ||
|  | ||
| ```pwsh | ||
| winget install --id Docker.DockerDesktop | ||
| ``` | ||
|  | ||
| </details> | ||
|  | ||
| ## Clone the repository and set up git | ||
|  | ||
| * Get a copy of the project by cloning the repository using git in your workspace: | ||
| ```shell | ||
| git clone --recurse-submodules [email protected]: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: | ||
| ```shell | ||
| 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. | ||
|  | ||
|  | @@ -149,9 +221,9 @@ copy .githooks/pre-comit .git/hooks/ | |
| > This is done both to avoid future merge conflict and ensure uniformity inside the code base. | ||
|  | ||
| * Configure git to automatically update submodules. | ||
| ```bash | ||
| git config --local submodule.recurse true | ||
| ``` | ||
| ```shell | ||
| git config --local submodule.recurse true | ||
| ``` | ||
|  | ||
| > [!NOTE] | ||
| > Git does not automatically update submodules when switching branches. | ||
|  | @@ -164,26 +236,17 @@ git config --local submodule.recurse true | |
| > [!NOTE] | ||
| > Both git configurations (hooks and submodule) will only be applied to this project and won't apply globally in your setup. | ||
|  | ||
| ### Check your development environment | ||
|  | ||
| You can confirm that your development environment is properly set up using the [quick check](#development-environment-quick-check) `setup.sh` script. | ||
|  | ||
| > [!NOTE] | ||
| > The `setup.sh` script is only available for MacOS and Linux. | ||
|  | ||
| ### Build the project | ||
| ## Building the project | ||
|  | ||
| After everything is properly set up, you can move on to the next section to start a build or check [the contribution guidelines](CONTRIBUTING.md). | ||
|  | ||
| ## Project build | ||
|  | ||
| To build the project without running tests, run: | ||
| ```bash | ||
| ```shell | ||
| ./gradlew clean assemble | ||
| ``` | ||
|  | ||
| To build the entire project with tests (this can take a very long time), run: | ||
| ```bash | ||
| ```shell | ||
| ./gradlew clean build | ||
| ``` | ||
|  | ||
|  | @@ -193,7 +256,7 @@ To build the entire project with tests (this can take a very long time), run: | |
| > 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: | ||
| ```bash | ||
| ```shell | ||
| ./gradlew :dd-java-agent:shadowJar | ||
| ``` | ||
|  | ||
|  | ||
      
      Oops, something went wrong.
        
    
  
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
Uh oh!
There was an error while loading. Please reload this page.