2014-05-03 11 views
6

Sto utilizzando SBT 0.13.2 e voglio attivare il mio compito tramite l'esecuzione del task di compilazione. So che posso ottenere questo risultato utilizzando il metodo triggeredBy, come in taskDefinition.triggeredBy(compile in Compile).Triggered Execution in SBT 0.13.x

Ho un build.sbt con l'attività personalizzata definita.

Il problema è che non riesco a capire perché i seguenti lavori come previsto

val triggeredTask = taskKey[Unit]("Triggered by compile") 

triggeredTask <<= Def.task { 
    println("TRIGGERED BY COMPILE") 
}.triggeredBy(compile in Compile) 

ma il prossimo non funziona (compile esegue bene, ma il mio compito non viene attivato)

val triggeredTask = taskKey[Unit]("Triggered by compile") 

triggeredTask := Def.task { 
    println("TRIGGERED BY COMPILE") 
}.triggeredBy(compile in Compile).value 

mio la comprensione era che SBT 0.13 reso <<= obsoleto e := dovrebbe essere sufficiente.

+1

credo questo è un bug legit. Non sono stato in grado di farlo funzionare con trigger a meno che non si usi la sintassi << (a causa di come funziona la codifica). – jsuereth

risposta

1

Potrei fraintendere quello che stai cercando di fare.

Se faccio il vostro esempio più dettagliato diventa in questo modo:

val triggeredTaskKey = taskKey[Unit]("Triggered by compile") 

val anonymousTask = Def.task { 
    println("TRIGGERED BY COMPILE") 
}.triggeredBy(compile in Compile) 

// I imagine the macro doing something like this 
triggeredTaskKey <<= anonymousTask map (identity) 

Anche questo non fa scattare il compito anonimo compile.

Si noti che <<= è una versione gloriosa di set che estrae le informazioni sulla posizione. E set è semplicemente un alias per Def.setting(key, value, position) che a sua volta crea una nuova istanza Setting. Si noti che l'istanza di impostazione creata internamente ha un costruttore di questi 3 parametri.

Non credo ci sia un modo in SBT per dichiarare un'impostazione senza chiave (potrei sbagliarmi qui). Sembra tuttavia che tu voglia creare un'impostazione (che viene attivata) senza una chiave.

Questo potrebbe essere causato da un bug, non sono sicuro se sbt dovrebbe ricorsivamente percorrere le dipendenze per trovare attività che hanno una chiave nella loro info. Attualmente, tuttavia, non (è come si vede nella trigger method.

In teoria si potrebbe fare un lavoro in giro che crea impostazioni con i trigger corretti legati a qualche chiave arbitraria. Io non sono sicuro come dovrebbe funzionare.

+0

Penso che questo sia un bug (non sono sicuro se è stato risolto o meno ora). jsureth ha menzionato questo in un commento alla domanda originale: il problema non è una soluzione, perché uno degli esempi funziona: ero solo curioso di quello che non lo è. – lpiepiora

Problemi correlati