2010-04-18 12 views
6

Basado en la sección Incrustar de http://github.com/technomancy/swank-clojure, Estoy usando lo siguiente para probarlo. ¿Hay una manera mejor de hacer esto que no usa el compilador? ¿Hay alguna manera de programáticamente detener swank? Parece que start-repl toma el control del hilo. Lo que sería una buena manera de engendrar otro hilo para él y poder matar ese hilo programáticamente.Incrustar swank-clojure en el programa java

import clojure.lang.Compiler; 
import java.io.StringReader; 

public class Embed { 
    public static void main(String[] args) throws Exception { 
     final String startSwankScript = 
      "(ns my-app\n" + 
       " (:use [swank.swank :as swank]))\n" + 
       "(swank/start-repl) "; 
     Compiler.load(new StringReader(startSwankScript)); 
    } 
} 

Cualquier ayuda muy apreciada, hhh

Respuesta

5

¿Sería aceptable para usted para implementar la clase Embed en Clojure? Puede hacerlo con gen-class (consulte Meikel Brandmeyer's tutorial para obtener más información) y compilación AOT.

El código podría ser algo como

(ns your-app.Embed 
    (:require [swank.swank :as swank]) 
    (:gen-class 
    :methods [[startSwank [] void]])) 

(defn -startSwank [] 
    (swank/start-repl)) 

(añadir cualquier otra cosa que necesite); luego, en la parte de Java de su aplicación, puede importar su clase preparada en Clojure, crear instancias y llamar al .startSwank() en la instancia.

No estoy seguro de detener programáticamente Swank ... Me gustaría saber de una buena manera de hacerlo yo mismo. (Y volveré con una actualización si lo resuelvo; de lo contrario, me gustaría leer la respuesta de otra persona que detalle cómo hacerlo).

Cuestiones relacionadas