¿Cómo se cargan recursos del programa como iconos, cadenas, elementos gráficos, scripts, etc. en un programa Clojure? Estoy usando un diseño de proyecto similar al de muchos proyectos Java donde hay un directorio de "recursos" colgando de un directorio "fuente". Se crea un archivo jar desde el origen e incluye los recursos, pero parece que no puedo cargar los recursos como lo haría en Java.Cómo cargar los recursos del programa en Clojure
Lo primero que intenté fue algo así como
(ClassLoader/getSystemResource "resources/myscript.js")
Pero nunca pudo encontrar el recurso.
se puede hacer algo similar con
...
(let [cls (.getClass net.mydomain.somenamespace)
strm (.getResourceAsStream cls name) ]
...
donde nombre es el name
del recurso a la carga, pero la corriente es nil
.
Puedes probar a utilizar el cargador de clases de contexto con algo así como
...
(let [thr (Thread/currentThread)
ldr (.getContextClassLoader thr)
strem (.getResourceAsStream ldr name)]
...
Pero strem
siempre es nula.
En la frustración, he intentado colocar los archivos de recursos en casi todos los directorios del programa. Se copian correctamente en el contenedor, pero todavía no puedo cargarlos.
He examinado las fuentes de idioma para la función load
y la biblioteca de tiempo de ejecución, pero no la estoy "obteniendo".
Cualquier ayuda sería apreciada.
EDIT: Aquí hay un ejemplo más concreto. En Java, si desea convertir MarkDown a HTML, es posible utilizar el script showdown.js
y escribir algo como:
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**"));
}
}
cuando se crea el proyecto, todo se compila y se envasa en un frasco. Cuando se ejecuta, el programa emite <p>plain, <em>emphasis</em>, <strong>strong</strong></p>
Una traducción literal de Clojure parece bastante sencillo, pero me encuentro con problemas tratando de crear el InputStreamReader
- Me parece que no puede escribir el código necesario para encontrar el archivo de secuencia de comandos en el frasco .
Editar: Se agregó la etiqueta "markdown" ya que la publicación brinda dos ejemplos completos de enfoques para el procesamiento de rebajas.
¿Es posible añadir un ejemplo en java? –
@arthur: Se agregó un ejemplo más concreto en Java. ¿Cómo lograrías lo mismo en Clojure? – clartaq