自定义其他插件的 sbt 插件

sbt plugin that customize other plugin

我有许多共享共同行为的 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       

我需要做什么来修复它?

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

build.sbt

您需要在此处添加插件

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

自动插件

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

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

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

调试

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

启用的插件

希望对您有所帮助, 向