如何在sbt插件中使用sbt-assembly?

时间:2018-07-03 06:37:15

标签: scala sbt sbt-assembly sbt-plugin

我正在编写一个sbt插件来抽象一些样板。 我们称之为sbt-redux

然后还有一个插件sbt-assembly

在此任务中,我的插件(sbt-redux)需要了解项目(正在使用sbt-redux的项目)将使用sbt-assembly创建Uber jar以及jar的名称是什么。 我曾尝试在sbt-redux的插件中添加sbt-assembly,但是由于显而易见的原因,它不会在我的src文件夹中添加依赖项,因为它仅在build.sbt中具有局限性。

我尝试使用.dependsOn(assembly),但还是没有运气。

那么,如何在src中使用其他插件?

P.S。如果问题不清楚,请告诉我。

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,它正在为我工​​作。 如果要阅读程序集的设置,则必须确保插件依赖它。在您的build.sbt文件中,您可以添加:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.7").

然后在您的AutoPlugin实现中,您应该以这种方式覆盖要求:

override def requires = super.requires && sbtassembly.AssemblyPlugin

之后,您将可以访问程序集设置和任务。

感谢gpoirier。

答案 1 :(得分:0)

为了扩展@arglee 的正确答案,当您有一个多模块项目时,addSbtPlugin 行需要成为需要依赖项的模块的 .settings 条目的一部分,例如:

lazy val mod = (project in file("mod"))
  .settings(
    ...,
    addSbtPlugin( ... ),
    libraryDependencies ++= Seq( ... ),
    ...
  )