【问题标题】:SBT project compile time only dependencySBT 项目仅编译时依赖
【发布时间】:2016-04-05 23:23:30
【问题描述】:

我正在尝试创建一个自定义任务,该任务将为我生成一些额外的资源。为此,我需要两个不同的库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 项目?

【问题讨论】:

    标签: scala compilation sbt task


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 1970-01-01
      • 2014-02-26
      • 2013-11-18
      • 1970-01-01
      • 2018-03-20
      • 2017-04-17
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多