Comment charger des ressources du programme en Clojure

Comment faites-vous pour charger les ressources du programme, tels que des icônes, des cordes, des éléments graphiques, scripts, et ainsi de suite dans un Clojure programme? Je suis à l'aide d'un projet de mise en page similaire à celle dans de nombreux projets Java où il y a un "ressources" annuaire accroché à une "source" de répertoire. Un fichier jar est créé à partir de la source et comprend les ressources, mais je n'arrive pas à obtenir les ressources chargé comme j'aimerais en Java.

La première chose que j'ai essayé était quelque chose comme

(ClassLoader/getSystemResource "resources/myscript.js")

Mais ne pourrait jamais trouver la ressource.

Vous pouvez faire quelque chose de similaire avec

...
  (let [cls (.getClass net.mydomain.somenamespace)
        strm (.getResourceAsStream cls name)        ]
...

où nom est le name de la ressource à charger, mais le flux est nil.

Vous pouvez essayer d'utiliser le contexte de la classe loader avec quelque chose comme

...

(let [thr (Thread/currentThread)
      ldr (.getContextClassLoader thr)
      strem (.getResourceAsStream ldr name)]
...

Mais strem est toujours nul.

Dans la frustration, j'ai essayé de placer les fichiers de ressources dans à peu près chaque répertoire dans le programme. Elles sont copiées dans le récipient correctement, mais je ne peux toujours pas sembler à les charger.

J'ai regardé les sources en langue pour le load de la fonction et de la bibliothèque run-time, mais je ne suis pas "se mettre" il.

Toute aide serait appréciée.

MODIFIER: Voici un exemple plus concret. En Java, si vous voulez convertir MarkDown en HTML, vous pouvez utiliser le showdown.js script et écrire quelque chose comme:

package scriptingtest;

import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Example {

    private Object converter;

    public String transformMarkDown(String markdownString) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("js");
        try {
            engine.eval(new InputStreamReader(getClass().getResourceAsStream(
                    "resources/showdown.js")));
            converter = engine.eval("new Showdown.converter()");
        } catch (Exception e) {
            return "Failed to create converter";
        }
        try {
            return ((Invocable) engine).invokeMethod(converter, "makeHtml",
                    markdownString).toString();
        } catch (Exception e) {
            return "Conversion failed";
        }
    }

    public static void main(String[] args) {
        System.out.println(new Example().transformMarkDown("plain, *emphasis*, **strong**"));
    }
}

quand j'ai créer le projet, tout sera compilé et emballé dans un bocal. Lorsqu'il est exécuté, le programme des sorties <p>plain, <em>emphasis</em>, <strong>strong</strong></p>

Une traduction littérale de Clojure semble assez simple, mais j'ai un problème en essayant de créer la InputStreamReader -- je n'arrive pas à écrire le code nécessaire pour trouver le fichier de script dans le pot.

Modifier: Ajout de "markdown" tag depuis l'après donne deux exemples d'approches pour le traitement de markdown.

  • pourriez-vous ajouter un exemple en java?
  • Ajout d'un exemple plus concret en Java. Comment voulez-vous accomplir la même chose en Clojure?
InformationsquelleAutor clartaq | 2010-01-11