2017-01-31 9 views
1

У меня есть зависимая задача для publish и publishLocal, что я хотел бы немного по-разному воздействовать на два (например, не разрешать фактическое опубликование версий моментальных снимков).Как зависеть от другой подзадачи, основанной на динамическом состоянии, в sbt

Есть ли способ в sbt API, чтобы я мог обнюхивать самую верхнюю задачу из-за зависимости?

Я попытался это:

def pick: TaskKey[Unit] = { 
    if (isSnapshot.value) { 
    aTask 
    } else { 
    bTask // the one `publish` is dependent on 
    } 
} 

Что бы выбрать правильную зависимость для publishLocal, но SBT не позволяет это:

/Users/akauppi/Git/boots-akka-http/stups.sbt:140: error: `value` can only be used within a task or setting macro, such as :=, +=, ++=, Def.task, or Def.setting. 

ответ

2

Вы должны использовать динамическую задачу (а Def.Initialize[Task[T]]) , Попробуйте это:

def pick: Def.Initialize[Task[Unit]] = Def.taskDyn { 
    if (isSnapshot.value) { 
    aTask 
    } else { 
    bTask 
    } 
} 

Вы можете можно непосредственно инициализировать Task[T] с Def.Initialize[Task[T]]:

lazy val pickTask = Def.taskKey[Unit]("Run the picked task.") 

pickTask := pick 
+0

Спасибо, это сработало. Мне не нужно было использовать 'pickTask' вообще, но поместил' pick' в зависимость от верхней задачи. Вероятно, это хорошо, поскольку мне не нужно запускать 'pick' сам по себе явно, когда-либо. – akauppi

+0

Да, вам никогда не понадобится «Настройка» для чего-то, что вы не планируете ссылаться через консоль или не меняете в файле сборки. – jkinkead