2010-10-06 5 views
16

Dans la hiérarchie des dossiers de projet SBT, je dois placer mes sources Scala dans src/main/scala et les tester dans src/tests/scala. Que dois-je mettre dans src/main/resources et src/tests/resources?A quoi servent les dossiers "ressources" dans les projets SBT?

+0

double possible de [comment obtenir une ressource au sein scalatest w/SBT] (http://stackoverflow.com/questions/5285898/comment-obtenir-une-ressource-dans-scalatest-w-sbt) – Suma

Répondre

16

Tout ce répertoire est compressé dans le .jar créé lorsque vous appelez package. Cela signifie que vous pouvez l'utiliser pour des images, des fichiers son, du texte, tout ce qui n'est pas du code mais qui est utilisé par votre code.

+0

Merci, Dylan. Pouvez-vous lier un exemple de code Scala (2.8) sur comment utiliser ces ressources alors? – Ivan

+1

Cette question en double a un exemple concis: http://stackoverflow.com/questions/5285898/how-to-get-a-resource-within-scalatest-w-sbt – emchristiansen

8

Voici un exemple de copie d'un fichier de texte stocké dans ressource à un système de fichiers local:

def copyFileFromResource(source: String, dest: File) { 
    val in = getClass.getResourceAsStream(source) 
    val reader = new java.io.BufferedReader(new java.io.InputStreamReader(in)) 
    val out = new java.io.PrintWriter(new java.io.FileWriter(dest)) 
    var line: Option[String] = None 
    line = Option[String](reader.readLine) 
    while (line != None) { 
     line foreach { out.println } 
     line = Option[String](reader.readLine) 
    } 
    in.close 
    out.flush 
    } 
+0

Que dois-je mettre en argument "source" ici? Un nom court d'un fichier dans src/main/resources? Je voudrais imprimer un court fichier d'aide intégré au cas où un de mes programmes serait appelé sans paramètres. Donc, j'ai copié le corps de votre fonction, supprimé dest/out pour utiliser simplement println pour imprimer sur stdout et utilisé "help.txt" comme source. Et cela me donne une exception NullPointerException dans java.io.Reader. . – Ivan

+1

Voir http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String) –

+1

Je pense que cela peut être raccourci en utilisant 'reader = io.Source .fromInputStream (in) .getLines() ',' out = nouveau PrintWriter (dest)) ', alors tout ce dont vous avez besoin est' reader foreach out.println' –

Questions connexes