2016-11-24 2 views
2

Я хочу, чтобы мой AutoPlugin отображал одну настройку, которая, если установлена, вызывает также ≈5 других настроек для соответствующих значений.Условно задайте несколько настроек в зависимости от значения другой настройки в SBT AutoPlugin

В частности, если сборка вниз устанавливает непустое shadedDeps:

val shadedDeps = settingKey[Seq[ModuleID]]("When set, the main JAR produced will include these libraries shaded") 

, то я хочу, чтобы автоматически установить несколько assembly настройки информации о связанных (например, assemblyExcludedJars, assemblyJarName, artifactClassifier).

Я не могу найти способ сделать это, потому что метод AutoPlugin.projectSettings не может получить доступ к shadedDeps.value (попытка сделать это дает ошибку «value can only be used within a task or setting macro»).

Лучшее, что я придумал это, чтобы мой плагин также определить параметр, как:

val extraAssemblySettings = settingKey[Seq[Def.Setting[_]]]("…") 

, а затем условно ЗАГРУЗКА, что установка с монтажно-настройки, которые я хочу, а затем оценки

extraAssemblySettings 

в нижестоящих проектах «build.sbt. В идеале я смог бы пропустить этот последний шаг и просто настроить значение shadedDeps.

Что-то о моей (очень наивной) ментальной модели настройки работы SBT явно несовместимо, так как кажется, что это должно быть тривиально, и, тем не менее, я просматривал интернет и выходил пустым.

+0

Можете ли вы показать все соответствующие коды? – nafg

ответ

0

В какой-то момент я понял это; this addSparkDeps block в моем плагине проекта-плагина для кухни - пример одного заклинания, которое можно поместить в нисходящий поток build.sbt и который разворачивается до нескольких настроек. Here's an example usage.