自定义其他插件的sbt插件

时间:2016-10-02 10:06:51

标签: sbt sbt-native-packager

我有很多共享行为的sbt项目,为sbt本地包添加了自定义。

我尝试在自定义插件中推送所有常用实用程序功能和任务。 特别是我有一个自定义任务需要在通用打包程序拉链所有之前执行。

这是结构:

object MyPlugin extends AutoPlugin {

  // my custom task 
  val customTask = Def.task { ...}

  override def requires: Plugins = JavaAppPackaging

  object autoImport {
     addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")
  }

  import autoImport._


  override def projectSettings: Seq[Setting[_]] =
     Seq(
        packageZipTarball in Universal <<= (packageZipTarball in Universal) dependsOn customTask
     )

  }

插件编译得很好,但当我在我的项目中导入它时,这样:

lazy val myProj: Project = (project in file("."))
   .settings(MyPlugin.projectSettings: _*)

我跑:

  sbt universal:packageZipTarball

我明白了:

 References to undefined settings: 

     universal:packageZipTarball from universal:packageZipTarball       

我需要修理它?

1 个答案:

答案 0 :(得分:1)

我猜你是在错误的地方添加插件。要将sbt-native-packager添加到sbt-plugin,请执行以下操作

build.sbt

你需要在那里添加插件

sbtPlugin := true
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")

AutoPlugin

您现在可以在AutoPlugin中访问native-packager。

import com.typesafe.sbt.SbtNativePackager.Universal
import com.typesafe.sbt.NativePackagerKeys.packageZipTarball

object MyPlugin extends AutoPlugin {
   // ... your code
}

调试

作为一般提示:调试未定义的设置和自动插件应始终首先查看已启用的自动插件。您可以通过调用sbt plugins列出项目中的所有插件。

希望有所帮助, 缪奇