Cómo ejecutar clojure desde matlab
classpath (1)
Parece que esto es un problema con Clojure que no está contento corriendo desde el "classpath dinámico" de Matlab. Obtuve el mismo error con Matlab R2014a en OS X 10.9, usando JVM incluido o Java 1.7.0u51. Pero si agrego clojure-1.5.1.jar
al classpath estático al colocarlo en un javaclasspath.txt
personalizado en el directorio de inicio de Matlab, entonces las clases de Clojure se vuelven visibles.
>> version -java
ans =
Java 1.7.0_51-b13 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode
>> cloj = clojure.lang.RT
cloj =
clojure.lang.RT@77de6590
Hackear el classpath de Java
En esta respuesta, utiliza el enfoque de "pirateo de ruta de clases" para agregar entradas al classpath estático desde la línea de comandos de Matlab y no tiene que ensuciar con una configuración personalizada de Matlab. La respuesta allí implica escribir una nueva clase Java, pero puede hacer el equivalente en puro código M.
function javaaddpathstatic(file)
%JAVAADDPATHSTATIC Add an entry to the static classpath at run time
%
% javaaddpathstatic(file)
%
% Adds the given file to the STATIC classpath. This is in contrast to the
% regular javaaddpath, which adds a file to the dynamic classpath.
%
% Files added to the path will not show up in the output of
% javaclasspath(), but they will still actually be on there, and classes
% from it will be picked up.
%
% Caveats:
% * This is a HACK and bound to be unsupported.
% * You need to call this before attempting to reference any class in it,
% or Matlab may "remember" that the symbols could not be resolved.
% * There is no way to remove the new path entry once it is added.
parms = javaArray(''java.lang.Class'', 1);
parms(1) = java.lang.Class.forName(''java.net.URL'');
loaderClass = java.lang.Class.forName(''java.net.URLClassLoader'');
addUrlMeth = loaderClass.getDeclaredMethod(''addURL'', parms);
addUrlMeth.setAccessible(1);
sysClassLoader = java.lang.ClassLoader.getSystemClassLoader();
argArray = javaArray(''java.lang.Object'', 1);
jFile = java.io.File(file);
argArray(1) = jFile.toURI().toURL();
addUrlMeth.invoke(sysClassLoader, argArray);
Por lo tanto, use este javaaddpathstatic()
lugar de javaaddpath()
y su código podría funcionar.
¿Cómo puedo ejecutar un script clojure de matlab?
Intenté seguir: ejecutar matlab con jdk 1.7 y luego llamar a Java
MATLAB_JAVA=/usr/lib/jvm/java-7-oracle/jre matlab
en el matlab, establece classpath y usa el compilador clojure
javaaddpath([pwd ''/lib/clojure-1.5.1.jar''])
import clojure.lang.RT
Aquí tengo un error:
Error using import
Import argument ''clojure.lang.RT'' cannot be found or cannot be imported.
Cuando escribo java class que ejecuta clojure, todo funciona desde la consola, pero no se ejecuta desde matlab. por favor aconséjame.