плагин sbt, который настраивает другой плагин

У меня есть много проектов 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       

Что мне нужно, чтобы исправить это?


person JayZee    schedule 02.10.2016    source источник


Ответы (1)


Я думаю, вы добавляете плагин не в то место. Чтобы добавить sbt-native-packager к вашему sbt-плагину, выполните следующие действия.

build.sbt

Вам нужно добавить плагин туда

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

Автоплагин

Теперь вы можете получить доступ к native-packager в своем AutoPlugin.

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

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

Отладка

Общий совет: отладку неопределенных настроек и автоматических плагинов всегда следует начинать с просмотра включенных автоматических плагинов. Вы можете перечислить все подключаемые модули в проекте, которые включены, вызвав sbt plugins.

Надеюсь, это поможет, Муки

person Muki    schedule 03.10.2016
comment
спасибо Муки, вы указали мне правильное направление: на самом деле мне также нужно было импортировать Native packager в проект, который использует как мой пользовательский плагин, так и универсальный. Добавление. enablePlugins(JavaAppPackaging) все исправил. Благодарность! - person JayZee; 10.10.2016