Demystifying %% and % in build.sbt: A Scala Dependency Dilemma

Introduction

When it comes to managing dependencies in your Scala project, build.sbt is your best friend. It’s where you specify the libraries your project relies on and how they should be fetched. If you’ve been navigating the Scala ecosystem, you’ve likely come across two commonly used operators for including libraries: %% and %. In this blog, we will explore these operators and understand their significance in managing Scala dependencies.

General Format for Including a Library in Scala

Before diving into the specifics of %% and %, let’s establish a general format for including a library in your Scala application. In your build.sbt file, you typically have a library dependency section where you declare the library you want to use. It usually looks something like this:

libraryDependencies += "group" %% "artifact" % "version"
  • “group” represents the organization or group that publishes the library.
  • “artifact” is the name of the library.
  • “version” specifies the version of the library you want to use.

Why Scala Version Matters

Unlike Java, Scala code is not compatible between different versions. Scala is a language that evolves, and libraries may have different versions compatible with specific Scala versions. When you specify a library dependency, it’s essential to ensure that it aligns with your project’s Scala version. This compatibility is indicated by the suffix used in the library’s artifact ID.

How %% Helps

Now, let’s address the %% operator. When you use %%, it signifies that you want to include a library that’s compatible with your project’s Scala version. It automatically appends the Scala version to the artifact ID. For instance:

libraryDependencies += "org.example" %% "my-library" % "1.0.0"

With %%, if your project is using Scala 2.12, it will resolve the dependency as:

libraryDependencies += "org.example" % "my-library_2.12" % "1.0.0"
Notice how _2.12 gets added to the artifact ID. This ensures that you're fetching a version of the library compiled for Scala 2.12.

On the other hand, when you use %, you must explicitly specify the Scala version in the artifact ID. For example:
libraryDependencies += "org.example" % "my-library_2.12" % "1.0.0"

In this case, you’re explicitly stating that you want the library compiled for Scala 2.12.

Conclusion

In summary, the choice between %% and % in your build.sbt depends on how you want to manage Scala versions for your dependencies. %% is a convenient way to ensure compatibility with your project’s Scala version, as it appends the Scala version to the artifact ID automatically. Conversely, % requires you to specify the Scala version explicitly.

Understanding these operators is crucial for hassle-free dependency management in your Scala projects. Make an informed choice based on your project’s needs and Scala version, and you’ll navigate the Scala ecosystem with confidence.


Related Post