2010-04-18 14 views
6

Basé sur la section Intégration de http://github.com/technomancy/swank-clojure, J'utilise ce qui suit pour le tester. Y at-il une meilleure façon de faire ce qui n'utilise pas de compilateur? Existe-t-il un moyen de bloquer par programme ? Il semble que start-repl prenne le contrôle du thread. Qu'est-ce que serait un bon moyen de générer un autre thread pour cela et être en mesure de tuer ce thread par programmation.Intégration de swank-clojure dans le programme 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)); 
    } 
} 

Toute aide très appréciée, hhh

Répondre

5

Serait-il acceptable pour vous de mettre en œuvre la classe Embed dans Clojure? Vous pouvez le faire avec gen-class (voir Meikel Brandmeyer's tutorial pour plus de détails) et la compilation AOT.

Le code pourrait aller quelque chose comme

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

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

(ajouter quelque chose dont vous avez besoin); Ensuite, dans la partie Java de votre application, vous pouvez importer votre classe préparée par Clojure, l'instancier et appeler le .startSwank() sur l'instance.

Je ne suis pas sûr d'arrêter par programme Swank ... Je serais curieux de connaître un bon moyen de le faire moi-même. (Et je serai de retour avec une mise à jour si je le découvre, sinon, j'aimerais lire la réponse de quelqu'un d'autre détaillant comment s'y prendre.)