Плагин компилятора SBT как переходная зависимость
У меня есть библиотека, которая использует плагин macro paradise (называемый библиотекой макро-провайдера). В build.sbt
,
addCompilerPlugin("org.scalamacros" % "paradise" % "2.0.0" cross CrossVersion.full)
чтобы получить доступ к макрокомандам.
При добавлении библиотеки макросов в качестве libraryDependency
в отдельный проект (называемый проектом "макро-потребитель" ) аннотации присутствуют, но реализация макроса никогда не вызывается. Добавление плагина компилятора макроса в проект макроэкономики libraryDependencies
решает проблему.
Можно ли включить плагины компилятора в качестве транзитивных зависимостей? Это освободило бы пользователей библиотеки макросов от добавления необходимого плагина.
Обновление # 1:
Помощник addCompilerPlugin
добавляет зависимость к libraryDependencies
и устанавливает зависимость с configuration = Some("plugin->default(compile)")
в библиотеке макроустройства.
Добавление зависимости paradise
в libraryDependencies
библиотеки макроустройства приводит к тому, что артефакт будет отображаться в проекте макропользователя. Он не добавляет зависимость как плагин компилятора.
Обновление # 2:
Настройка autoCompilerPlugins := true
в проекте macro-consumer в сочетании с Обновить # 1 не устраняет проблему.
Ответы
Ответ 1
Единственное, что я нашел для решения этой проблемы, было добавление подмодуля sbt-plugin
, который включает необходимые настройки. Плагин очень простой,
package fixme
import sbt._
import Keys._
object Plugin extends sbt.Plugin {
val paradiseVersion = "2.0.0"
val fixmeVersion = "1.4"
val fixmeSettings: Seq[Setting[_]] = Seq(
resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/",
libraryDependencies <++= (scalaVersion) { v: String ⇒
(if (v.startsWith("2.10")) List("org.scalamacros" %% "quasiquotes" % paradiseVersion % "compile")
else Nil) :+
"org.scala-lang" % "scala-reflect" % v % "compile" :+
"com.tysonjh" %% "fixme" % fixmeVersion % "compile"
},
addCompilerPlugin("org.scalamacros" % "paradise" % paradiseVersion cross CrossVersion.full))
}
Это можно использовать, включив в свой project/plugins.sbt
,
resolvers += "tysonjh releases" at "http://tysonjh.github.io/releases/"
addSbtPlugin("com.tysonjh" % "sbt-fixme" % "1.4")
и build.sbt
,
fixmeSettings
Параметры sbt-plugin добавляют плагин macro paradise как зависимость от компилятора, а реализация макроса - как зависимость от библиотеки.