2011-07-08 3 views
5

Est-ce que quelqu'un a réussi à créer un projet NetBeans qui combine Clojure et source Java?Source Clojure et Java dans le même projet NetBeans

J'ai des projets où le programme pilote (startup, gui, prefs utilisateur, etc.) est en Java, mais la logique est dans Clojure. À l'heure actuelle, je compile le code Clojure dans un pot dans un projet et l'importe en tant que bibliothèque dans un projet Java distinct. Il serait pratique que toutes les sources puissent être combinées dans un seul projet NetBeans.

Quelqu'un a-t-il trouvé une méthode pour le faire?

+0

Je ne l'ai pas fait cela dans Netbeans mais faites-le travailler dans Eclipse de sorte que la même approche peut fonctionner: tout mettre en place un projet Java, ont les pots de Clojure dans le classpath et incluez vos fichiers .clj dans la construction afin qu'ils soient disponibles sur le chemin de classe lors de l'exécution. – mikera

Répondre

2

Une solution possible consiste à modifier le script Ant de votre projet Java NetBeans (build.xml dans votre répertoire racine) pour l'avoir. Par défaut, NetBeans crée plusieurs cibles Ant dans le fichier build.xml du répertoire racine du projet, que vous pouvez remplacer pour automatiser les tâches au-delà du processus de construction standard (comme la compilation d'autres langages pour utiliser leurs bibliothèques dans votre projet actuel). En remplaçant l'une des cibles d'espace réservé dans ce script de construction comme "-pre-compile" vous pouvez écrire une cible simple pour appeler le processus de compilation Clojure en utilisant la tâche "exec" Ant et placer tous les fichiers de classe résultants (ou JAR) dans le répertoire de construction approprié. Si vous le faites fréquemment, vous pouvez définir une extension Ant (via une macro ou un plugin Ant) afin de ne pas avoir à modifier le fichier build.xml à chaque fois.

+0

Quelle bonne idée! J'ai utilisé les cibles d'espace réservé à d'autres fins dans le passé, mais cela ne m'est jamais venu à l'esprit. – clartaq

+0

Heureux que ça a bien marché pour vous! J'ai réellement eu l'idée parce que nous avons besoin d'utiliser Ant comme un langage de script de construction pour un langage propriétaire conçu par mon entreprise (sauf si nous voulions compiler/lier chaque fichier source à la main). L'écriture de nos outils de construction dans Ant nous permet d'intégrer ce langage intermédiaire, fragile par ailleurs, à tous les projets Java Eclipse/NetBeans. – depthfirstdesigner

1

J'utilise la méthode RT. Je mets mon code Clojure dans un fichier de script que j'inclus et processus au démarrage:

try { 
      RT.loadResourceScript("com/mydomain/app/clojure_scripts.clj"); // Initialize Clojure script processor with our script 
     } catch (Exception e) { 
      Util.logException(e, "Unable to run Clojure initialization script."); 
     } 

Alors, puisque ma logique principale est en Java et je n'appeler vers Clojure pour les calculs, j'utilise un code de colle pour cartographier les appels pour moi:

/* 
* Class to wrap Clojure scripts with Java friendly methods. 
*/ 
public class Clojure { 
    private static final String ns="com.mydomain.app"; 

    public static double calculate(final double size, final double otherVar) { 
     Var report=RT.var(ns, "calculate"); 
     return (Double) report.invoke(size, otherVar); 
    } 
}; 
Questions connexes