在sbt中添加仅编译时依赖项

0__*_*0__ 19 scala dependency-management maven sbt

我想为sbt项目添加一个依赖项,它只用于编译.它既不应该在运行时类路径上,也不应该在已发布的POM中以任何形式显示.

我们的想法是添加一个仅存根库(OrangeExtensions),以便可以在任何平台上编译项目,而不仅仅是OS X.

有可能这样吗:

libraryDependencies += "com.yuvimasory" % "orange-extensions" % "1.3.0" % ???
Run Code Online (Sandbox Code Playgroud)

gou*_*ama 51

您可以为此创建自定义依赖项配置(实际上,当您在项目中使用私有宏时,这种情况变得非常普遍,我希望SBT提供一个).

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"))
Run Code Online (Sandbox Code Playgroud)

该依赖关系不会出现在pom.xmlpublish朋友生成的内容中.

目前几乎可以这样配置:provided配置.除了provided最终pom.xml作为与provided范围的依赖.此外,provided表示"运行时本身在运行时提供此功能",而不是"运行时不需要".

  • 一个很好的答案真的值得更多的赞成:) (3认同)
  • 注意sbt1.0需要一个大写配置项.使用`val CompileOnly = config("compileonly"); ivyConfigurations + = CompileOnly.hide;`参见:/sf/answers/2484056921/ (3认同)
  • 对于使用'dependsOn(macrosProject%"compileonly")'的SBT宏项目,这对我不起作用(否则[根据文档](http://www.scala-sbt.org/0.13.2/docs/)详细-主题/宏观Projects.html)).任何想法为什么不呢?子项目在编译时不可用. (2认同)
  • 似乎不适用于Intellij scala插件(1.1.2)。 (2认同)