2017-10-11 6 views
1

J'essaye d'ajouter une nouvelle commande à mon sbt.Comment ajouter une commande personnalisée dans sbt?

Dans mon build.sbt je

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

Dans un fichier frère mySuperDuperCommands.sbt Je

lazy val mySuperDuperTaskKey = TaskKey[Unit]("mySuperDuperCommand") 

lazy val mySuperDuperCommand := { ... do *amazing* stuff ... } 

Il me donne l'erreur cannot resolve symbol "mySuperDuperCommand" à l'intérieur build.sbt. Comment résoudre ce problème?

+0

Avez-vous essayé de localiser mySuperDuperCommands.sbt dans le répertoire du projet à la place? – P3trur0

+0

@ P3trur0 J'ai eu une erreur: pas trouvé: valeur mySuperDuperCommand – gurghet

Répondre

2

Si vous voulez rester avec un seul fichier de construction puis, dans votre build.sbt vous pouvez faire:

lazy val mySuperDuperTask = TaskKey[Unit]("mySuperDuperCommand") 
lazy val root = (project in file(".")).settings(mySuperDuperTask:= { ... }) 

bien sûr en remplaçant ... avec votre propre mise en œuvre des tâches.

Sinon, si vous préférez utiliser deux fichiers différents, vous pouvez faire quelque chose comme ceci:

En project/Build.scala vous pouvez définir votre tâche. Par exemple:

import sbt._ 
import Keys._ 

object ProjectBuild { 
    lazy val mySuperDuperTask = TaskKey[Unit]("mySuperDuperCommand", "Prints hello.") 
    def buildSettings = Seq(mySuperDuperTask:={println("Hello")}) 
} 

Ensuite, dans votre build.sbt vous pouvez écrire:

import ProjectBuild._ 
lazy val root = (project in file(".")).settings(ProjectBuild.buildSettings : _*) 

Ensuite, vous pouvez appeler votre sbt mySuperDuperCommand approprié.

J'espère que ça aide!

+0

Donc, pas moyen de le mettre dans un fichier séparé? – gurghet

+0

Oui, dans mon exemple, vous devriez rester avec build.sbt. Cependant, si vous préférez, vous pouvez le faire dans deux fichiers séparés aussi. – P3trur0

1

Votre ligne

lazy val mySuperDuperCommand := { ... do *amazing* stuff ... } 

est faux. := est une fonction qui crée une définition de paramètre. Changer la ligne à

lazy val mySuperDuperCommand: Def.SettingsDefinition = { 
    mySuperDuperTaskKey := { ... do *amazing* stuff ... } 
} 

et cela devrait fonctionner.