2017-05-03 6 views
4

J'écris un plugin SBT. Je voudrais utiliser la bibliothèque de Circé JSON, mais il nécessite le plugin de compilateur Macro Paradise sur Scala 2.10.Plugin SBT: Comment ajouter un plugin de compilateur en tant que dépendance qui n'est pas propagée en aval?

Normalement, vous ajoutez des plugins de compilation à build.sbt et des plugins SBT à project/plugins.sbt.

Maintenant, lorsque vous construisez un plugin SBT, les autres plugins deviennent des dépendances, donc vous les mettez à build.sbt et ils sont propagés aux projets où vous utilisez votre plugin SBT.

Quand je mets l'extrait suivant dans build.sbt de mon plugin SBT:

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

Est-ce que le plugin compilateur Paradise propagées à des projets en aval?

Répondre

5

Les plug-ins du compilateur ne sont pas propagés par défaut, mais ils seront en fait requis par les utilisateurs en aval en tant que dépendance, et vous n'avez aucun moyen de contourner cette exigence. La raison est simple, leur code sera compilé dans une unité de compilation différente, aussi longtemps que vous avez des fonctionnalités qui dépendent du plugin du compilateur que vous trouverez dans le code de fin, vous devrez également coller un notez sur ce plugin pour ajouter explicitement la dépendance.

Espérons que cela aide, et prendre par exemple le très populaire Monocle lib here. Les annotations ne se développeront pas sans le paradis, par exemple, tout dépend donc de ce dont l'utilisateur final aura besoin.

Citation

Si vous souhaitez utiliser des annotations telles que macro @Lenses, vous aurez également besoin d'inclure:

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