Плагин SBT: как добавить плагин компилятора в качестве зависимости, которая не распространяется вниз по течению?

Я пишу плагин SBT. Я хотел бы использовать библиотеку Circe JSON, но для нее требуется подключаемый модуль компилятора Macro Paradise на Scala 2.10.

Обычно подключаемые модули компилятора добавляются к build.sbt, а подключаемые модули SBT — к project/plugins.sbt.

Теперь, когда вы создаете плагин SBT, другие плагины становятся зависимостями, поэтому вы помещаете их в build.sbt, и они распространяются на проекты, в которых вы используете свой плагин SBT.

Когда я помещаю следующий фрагмент в build.sbt моего плагина SBT:

addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full)

Распространяется ли подключаемый модуль компилятора Paradise на последующие проекты?


person mirosval    schedule 03.05.2017    source источник


Ответы (1)


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

Причина проста: их код будет скомпилирован в другом блоке компиляции, поэтому, если у вас есть функции, зависящие от плагина компилятора, который будет найден в конечной кодовой базе, вам также нужно будет добавить примечание к этому плагину. чтобы явно добавить зависимость.

Надеюсь, это поможет, и возьмите, например, действительно популярную библиотеку Monocle здесь. Например, аннотации не будут расширяться без рая, поэтому все зависит от того, что нужно конечному пользователю.

Цитата

Если вы хотите использовать аннотации макросов, такие как @Lenses, вам также необходимо включить:

addCompilerPlugin("org.scalamacros" %% "paradise" % "2.1.0" cross CrossVersion.full)
person flavian    schedule 03.05.2017
comment
Как вы форсируете распространение? В моем случае я хочу, чтобы addCompilerPlugin, добавленный в мой плагин, распространялся вниз по течению до потребителя плагина. - person Wonay; 17.12.2018
comment
@Wonay Я не думаю, что вы можете, если только нет какой-либо настройки SBT, где вы можете заставить его сохранить это в пути к классам. - person flavian; 18.12.2018