Как добавить зависимость задачи от задачи из другого плагина в мой плагин SBT?

Я пишу подключаемый модуль для SBT, который будет генерировать файлы конфигурации, необходимые для создания функции Azure из программы Scala. Мои усилия находятся на github (https://github.com/code-star/sbt-azure-functions-plugin/tree/develop), и, как можно прочитать в файле readme, я хочу автоматически запускать задачу assembly всякий раз, когда пользователь выдает sbt azfunCreateZipFile.

Пользователи моего плагина могут добиться этого, добавив следующую строку в свой build.sbt:

azfunCreateZipFile := (azfunCreateZipFile dependsOn assembly).value

Я бы хотел, чтобы эта проводка задачи уже была включена в определение моего плагина. Как я могу это сделать?

Я знаю, что задачи можно сделать зависимыми от других задач, используя otherTask.value в определении задачи, поэтому я попытался добавить такую ​​строку в определение задачи azfunCreateZipFile (см. ./plugin/src/main/scala/sbtazurefunctions/AzureFunctions.scala):

azfunGenerateFunctionJsons := {
  // depend on assembly step
  val _ = assembly.value
  ... <actual task definition code>
  azfunTargetFolder.value
}

Но потом получаю ошибку, что сборка не найдена:

[IJ]sbt:root> compile
[info] Compiling 1 Scala source to /home/jml/work/scala/azure/sbt-azure-functions- plugin/plugin/target/scala-2.12/sbt-1.0/classes ...
[error] /home/jml/work/scala/azure/sbt-azure-functions-plugin/plugin/src/main/scala/sbtazurefunctions/AzureFunctions.scala:113:15: not found: value assembly
[error]       val _ = assembly.value
[error]               ^
[error] one error found
[error] (plugin / Compile / compileIncremental) Compilation failed
[error] Total time: 1 s, completed Jan 3, 2021, 4:41:56 PM
[IJ]sbt:root> 

Я пробовал много импортов, но ни один из них не увенчался успехом:

import sbtassembly.AssemblyPlugin._ (and variations using AssemblyKeys and the AutoImport object)
import sbt.Keys._

Что я могу сделать, чтобы исправить это?


person JeanMarc    schedule 03.01.2021    source источник


Ответы (1)


Этот другой ответ SO (Как я могу использовать плагин sbt в качестве зависимости в многопроектной сборке?) наконец-то направил меня на правильный путь, так как он показывает использование libraryDependencies += Defaults.sbtPluginExtra, так что спасибо @michael-zajac.

В итоге я добавил зависимость сборки следующим образом:

lazy val plugin = (project in file("plugin"))
  .enablePlugins(SbtPlugin)
  .settings(
    ...<other settings>...,
    libraryDependencies ++= Seq(
      "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value,
      Defaults.sbtPluginExtra("com.eed3si9n" % "sbt-assembly" % "0.14.10", "1.0", "2.12")
    ),
    ...

Даже лучше:

    libraryDependencies ++= Seq(
      "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value
    ),
    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10"),
person JeanMarc    schedule 04.01.2021