2015-05-20 1 views
0

Я написал простой SBT плагин, который определен в helloMessage, а значение по умолчанию None:Почему мое использование `ThisBuild` не работает?

lazy val helloMessage = settingKey[Option[String]]("the message for hello") 

override def projectSettings = Seq(
    helloMessage in ThisBuild := None, 
    hello := println("Hello from my plugin: " + helloMessage.value) 
) 

Затем в проекте тестирования, я добавил этот плагин, и определяется в build.sbt:

helloMessage in ThisBuild := Some("hello from this build") 

lazy val root = project in file(".") 

lazy val core = project in file("core") 

Вы можете заметить, я использовал ThisBuild для helloMessage.

Но проблема в том, что когда я запускаю ./sbt helloMessage в тестовом проекте, он просто выводит None! Не сообщение Some("hello from this build") Я определил!

Но если удалить две строки:

lazy val root = project in file(".") 

lazy val core = project in file("core") 

или просто core линии, он будет выводить ожидаемое сообщение Some("hello from this build").

Где не так? Если мне нужно сохранить несколько проектов, как их исправить?

ответ

0

С помощью buildSettings для in ThisBuild настроек, как предложено in the docs.

+0

Спасибо, я просто определяю 'helloMessage: = None' в' buildSettings', теперь все в порядке. Но вскоре я обнаружил, что он может использовать настройки типа 'name.value' или' target.value' – Freewind

0

Возможное решение, изменение:

helloMessage in ThisBuild := None 

в

helloMessage in Global := None 
0

Я считаю, что вопрос с порядком инициализации. В вашем файле build.sbt сначала будет выполнена строка helloMessage in ThisBuild := Some("hello from this build"). Это установит настройку helloMessage в глобальной (сборке) области.

Теперь, когда любой из ваших проектов будет инициализирован, он запустит новую настройку helloMessage in ThisBuild := None. Это заменит параметр helloMessage в глобальной области действия None.

Один из способов избежать этого - удалить ThisBuild из настроек вашего проекта. То есть вы сохраняете область ThisBuild в своем основном файле build.sbt, но сохраняете локальную область (helloMessage := None) внутри параметров проекта в своем определении плагина.

Смежные вопросы