#sbt #sbt-native-packager
#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:
Я думаю, вы добавляете плагин не в том месте. Чтобы добавить sbt-native-packager в ваш sbt-плагин, выполните следующие действия
build.sbt
Вам нужно добавить плагин туда
sbtPlugin := true
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.1")
AutoPlugin
Теперь вы можете получить доступ к native-packager в своем AutoPlugin.
import com.typesafe.sbt.SbtNativePackager.Universal
import com.typesafe.sbt.NativePackagerKeys.packageZipTarball
object MyPlugin extends AutoPlugin {
// ... your code
}
Отладка
В качестве общего совета: отладка неопределенных настроек и автоматических плагинов всегда должна начинаться с просмотра включенных автоматических плагинов. Вы можете перечислить все плагины в проекте, которые включены путем вызова sbt plugins
.
Надеюсь, это поможет, Муки
Комментарии:
1. спасибо, Муки, ты указал мне правильное направление: на самом деле мне также нужно было импортировать собственный упаковщик в проект, который использует как мой пользовательский плагин, так и универсальный. Добавление. enablePlugins (JavaAppPackaging) исправил все. Спасибо!