Sbt Plugin 添加依赖到 project/build.sbt

Posted

技术标签:

【中文标题】Sbt Plugin 添加依赖到 project/build.sbt【英文标题】:Sbt Plugin Add Dependency to project/build.sbt 【发布时间】:2014-09-18 07:47:58 【问题描述】:

我有一个 sbt 插件,当启用它时,它会通过 scalac 选项添加一个 scalac 编译器插件。一切都很好。

但是,如果 scalac 编译器插件本身具有需要使用的依赖项,我无法使其工作。我试过了:

将依赖项添加到目标项目 libraryDependencies 将其指定为 sbt 插件本身的依赖项。

我认为我需要做的是(它是一个自动插件):

override lazy val projectSettings = Seq(
  ...
  projectsPluginsDependencies ++= Seq(
    "com.typesafe" % "config" % "1.2.1" % Compile.name
  )
  ...
)

如果 projectsPluginsDependencies 是有效的键。这可能吗?

(事实上,我什至不确定如何手动将依赖项添加到最终项目中。如果编译器插件需要依赖项 X,你如何满足呢?我尝试将其添加到 project/build.sbt 中不起作用)。

只是为了超级清楚-我不是在问如何添加 sbt-plugin 需要的依赖项。我在问如何添加编译器插件需要的依赖项,它本身是由 sbt-plugin 添加的。

【问题讨论】:

【参考方案1】:

见Compiler Plugin Support。

autoCompilerPlugins := true

libraryDependencies +=
    compilerPlugin("org.scala-lang.plugins" % "continuations" % scalaVersion.value)

scalacOptions += "-P:continuations:enable"

试试看这是否会引入传递依赖。

【讨论】:

这是给使用编译器插件的项目吗?我要做的是让用户使用我的 SBT 插件,然后自动处理编译器插件的内容。 这不起作用。我已经更新了我的 sbt 插件来做到这一点: overridelazy val projectSettings = Seq( autoCompilerPlugins := true, libraryDependencies ++= Seq( compilerPlugin(GroupId % (ArtifactId + "_" + scalaBinaryVersion.value) % Version % Compile.name ) )) 但没有运气。引起:java.lang.ClassNotFoundException: com.typesafe.config.ConfigFactory 如果你删除 compilerPlugin() 和 autoCompilerPlugins:=true 这个问题解决了吗?在***.com/questions/34253338/… 的另一个雄心勃勃的场景中,我遇到了同样的高难度

以上是关于Sbt Plugin 添加依赖到 project/build.sbt的主要内容,如果未能解决你的问题,请参考以下文章

使用 SBT - Native Packager Plugin 添加工件以播放项目

如何通过将 sbt-plugin 用作多项目构建中的依赖项来访问它的子项目?

如何将任务依赖项从另一个插件添加到我的 SBT 插件?

SBT 插件:如何将编译器插件添加为不向下游传播的依赖项?

无法使用 sbt 0.13 上传到 sonatype 且 xsbt-gpg-plugin 未解决依赖项:com.jsuereth#xsbt-gpg-plugin;0.6

如何在 sbt 项目中使用 sbt 插件作为库依赖项?