SBT项目编译时只依赖

时间:2016-01-01 11:28:25

标签: scala compilation sbt task

我正在尝试创建一个自定义任务,为我生成一些额外的资源。为此,我需要两个不同的库AA-runtime

A只是一个编译时依赖项,可以生成源文件。还需要A-runtime作为运行时依赖项。

包含A-runtime很简单,只需将其包含在库依赖项中即可:

libraryDependencies += "com.organization" % "A-runtime" % "version"

由于我不希望A库包含在运行时依赖项中,因此我尝试为此创建一个新的ivyConfiguration:

ivyConfigurations += config("compileonly").hide

并将库包括在内:

libraryDependencies += "com.organization" % "A" % "version" % "compileonly"

然后我在Build.scala中将新任务定义为:

lazy val myTask = taskKey[Unit]("description")
val customTaskSettings = Seq(
  customTask := {
      com.organization.Generator.run()
  }
)


lazy val myProject = project
  .in(file("."))
  .settings(customTaskSettings)

然而,现在,SBT无法再打开项目,因为找不到com.organization.Generator。这是有道理的,因为在SBT编译Build.scala时,它不依赖于A

现在我知道任何SBT项目都只是另一个scala项目,但有没有办法将A库作为依赖项添加到SBT项目中?

1 个答案:

答案 0 :(得分:0)

  

现在我知道任何SBT项目都只是另一个scala项目,但有没有办法将A库作为依赖项添加到SBT项目中?

SBT项目本身的依赖关系必须在project/build.sbtproject/project/Build.scala中定义,而不是在project/Build.scala中定义。并且您不希望该依赖项仅为编译时,因为您需要运行它以执行customTask