2009-02-26 9 views

Respuesta

14

Siempre que los idiomas en cuestión realmente produzcan clases Java (es decir, clases que son conocidas por la plataforma Java, no necesariamente escritas en el lenguaje Java), entonces sí: pueden interactuar fácilmente entre sí.

Al menos para Groovy, sé que es muy posible escribir clases que se puedan usar a partir del código Java "normal".

+0

También es posible utilizar Clojure genera clases en código Java y viceversa: por lo que el conjunto Clojure <-> Java <-> camino maravilloso debe trabajar – mikera

14

Clojure se puede compilar en archivos .class a través de gen-class y se utiliza desde Java como cualquier otro código; ver here.

2

Como ya se mencionó, puede acceder a las clases de Clojure desde Groovy mediante precompilación.

Puede acceder a los lenguajes más populares de scripting a través de la API de script de Java 6, aunque Scala y Clojure no parecen ser compatibles oficialmente. Estos son algunos ejemplos de Groovy:

http://groovy.codehaus.org/JSR-223+access+to+other+JVM+languages

También puede obtener acceso a las clases de Clojure de Groovy, por ejemplo, (Por Groovy 1.7 instantánea):

@Grab(group='org.clojure', module='clojure', version='1.0.0') 
import clojure.lang.* 

def ss = StringSeq.create('The quick brown fox') 
def done = false 
while (!done) { 
    println ss.first() 
    ss = ss.next() 
    done = !ss 
} 

O interactuar a través de la creación de un nuevo proceso (de nuevo por Groovy 1.7 instantánea):

@Grab(group='org.clojure', module='clojure', version='1.0.0') 
import clojure.lang.Script 

def src = new File('temp.clj') 
src.text = ''' 
(defn factorial [n] 
    (if (< n 2) 
     1 
     (* n (factorial (- n 1))))) 
(println (factorial 4)) 
''' 
def path = System.getProperty('user.home') + '/.groovy/grapes/org.clojure/clojure/jars/clojure-1.0.0.jar' 
new AntBuilder().with { 
    java(classname:Script.name, classpath:path) { 
     arg(value:src.path) 
    } 
} 

También hay un plugin Clojure para Grails que proporciona un fácil acceso para ejecutar código clojure de cualquier artefacto Grails (controladores, taglibs, servicios, etc ...):

http:// grails.org/plugin/clojure

+0

acaba de comentar los griales plugin de parte y decir que he utilizado el plugin en la producción sin problemas, y gran alegría –

3

Como se ha mencionado, Clojur e puede interactuar fácilmente con Java. Aunque muchos de los ejemplos que se muestran muestran cómo hacerlo desde REPL, una vez que compila Clojure, o cualquier otro lenguaje JVM, en una clase o archivo jar, se puede invocar desde Java como cualquier otra clase.

En mi caso, la dificultad (no mucho de uno) fue averiguar cómo usar gen-class correctamente. Hay un pequeño conjunto de funciones estadísticas escritas en Clojure en http://kenai.com/projects/binomialstats que ilustra cómo hacerlo. Esa biblioteca Clojure es utilizada por un proyecto Java - signtest. (Lo siento, dado que soy nuevo, StackOverflow no me deja publicar varios enlaces)

Lo que estaría muy bien ahora es si algunos de los IDE podrían tratar con diferentes idiomas en el mismo proyecto. Los dos proyectos mencionados anteriormente se mantienen como dos proyectos NetBeans individuales, por ejemplo. Asegurar que las dos partes estén siempre sincronizadas puede ser un poco más de trabajo.

Cuestiones relacionadas