我有很多共享行为的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
我需要修理它?
答案 0 :(得分:1)
我猜你是在错误的地方添加插件。要将sbt-native-packager添加到sbt-plugin,请执行以下操作
你需要在那里添加插件
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
列出项目中的所有插件。
希望有所帮助, 缪奇