Add a compile time only dependency in sbt

dependency-management, maven, sbt, scala

Solution

You can create a custom dependency configuration for this (actually, this is getting so common when you use private macros in your project, I wish SBT provided one).

In `build.sbt`:

// a 'compileonly' configuation
ivyConfigurations += config("compileonly").hide

// some compileonly dependency
libraryDependencies += "commons-io" % "commons-io" % "2.4" % "compileonly"

// appending everything from 'compileonly' to unmanagedClasspath
unmanagedClasspath in Compile ++= 
  update.value.select(configurationFilter("compileonly"))

That dependency will not appear in the `pom.xml` generated by `publish` and friends.

There almost is such a configuration available: the `provided` configuration. Except that `provided` ends up in the `pom.xml` as a dependency with `provided` scope. Also, `provided` means "the runtime itself provides this at runtime", not "this is not needed at runtime".

Problem

I would like to add a dependency to an sbt project which is only used for compilation. Neither should it be on the runtime class path, nor should it be visible in any form in the published POM. The idea is to add a stub only library (OrangeExtensions) so that the project can be compiled on any platform not just OS X. Is it possible like this somehow: ``` libraryDependencies += "com.yuvimasory" % "orange-extensions" % "1.3.0" % ??? ``` ?

Original source

Related problems