Skip to main content

Build Tools Overview

Metals works with the following build tools with varying degrees of functionality.

Build toolInstallationGoto library dependenciesFind references
sbtAutomatic via BloopAutomaticAutomatic
MavenAutomatic via BloopAutomaticSemi-automatic
GradleAutomatic via BloopAutomaticAutomatic
MillAutomatic via BloopAutomaticAutomatic
BloopAutomaticSemi-automaticSemi-automatic
BazelAutomaticBuild definitionSemi-automatic

Installation

Automatic via Bloop: you can import the build directly from the language server without the need for running custom steps in the terminal. The build is exported to Bloop, a Scala build server that provides fast incremental compilation.

Automatic: you can import the build directly from the language server without the need for running custom steps in the terminal. To use automatic installation start the Metals language server in the root directory of your build.

Manual: setting up Metals requires a few manual steps to generate Bloop JSON files. In addition to normal Bloop installation, Metals requires that the project sources are compiled with the semanticdb-scalac compiler plugin and -Yrangepos option enabled.

Goto library dependencies

Automatic: it is possible to navigate Scala+Java library dependencies using "Goto definition".

Semi-automatic: navigation in library dependency sources works as long as the Bloop JSON files are populated with *-sources.jar.

Build definition: navigation in library dependency sources works as long as the sources are enabled for library dependencies in the Bazel definition.

Find references

Automatic: it is possible to find all references to a symbol in the project.

Semi-automatic: it is possible to 'Find symbol references' as soon the SemanticDB compiler plugin is manually enabled in the build, check separate build tool pages for details.

Integrating a new build tool

Metals works with any build tool that supports the Build Server Protocol. For more information, see the guide to integrate new build tools.