2012-11-03 8 views
5

Für eine Klasse muss ich etwas JVM-Code schreiben, und ich hoffe, Clojure zu verwenden. Ich habe es mit dem unteren Teil des Software-Stacks arbeiten lassen, aber ich kann es nicht schaffen, dass es zwischen der GUI-Ebene, die oben und unten sitzt, funktioniert. Mein Hauptproblem ist, dass die Java-GUI meine Clojure-Dateien erkennt. Ich möchte Leiningen dafür verwenden, aber die Java-Kompilierungslösung scheint diese Interoperation nicht zu berücksichtigen. Die Antwort here scheint genau das zu sein, was ich brauche. Ich verstehe nicht, wo man den Code und so (nur nicht genug Details) setzen. Hat jemand irgendwelche Tipps?Sandwich Clojure zwischen Java mit Leiningen

Ich habe versucht, eine plugin, aber es scheint nicht zu funktionieren. Ich weiß, dass mein Fall definitiv am Rande von Problemen liegt, aber eine Lösung würde die Verwendung von Clojure in einem Klassenzimmer viel einfacher machen.

Danke!

WEITERE DETAILS:

ich nicht viel Glück mit der Verwendung einer kompilierten Clojure Glas hatte. Ich muss eine (ugh) Stateful Clojure-Klasse erstellen (d. H. Die Methoden können nicht statisch sein). Der Code für meine Klasse (src/final_project/MyLinkLayer.clj) sieht aus wie

(ns final_project.MyLinkLayer 
    (:gen-class)) 

(defn -init[s] (print s)) 
(defn -send [dest data len] (println data)) 
(defn -recv [trans] (println trans)) 
(defn -status [] (println "I am a status!")) 
(defn -command [cmd value] (println (str cmd " with value=" value))) 

Mein project.clj

(defproject final_project "0.1.0-SNAPSHOT" 
    :description "A simulated MAC layer." 
    :dependencies [[org.clojure/clojure "1.4.0"] 
       [local/classFiles "1"]] 
    :aot [final_project.MyLinkLayer]) 

Die Klasse kompiliert ("lein Kompilierung") ist in Ordnung in „target/classes/final_project/", aber die Methoden werden nicht angezeigt. Ich kann die Klasse über jar laden (mit Maven im oberen Java-Teil meiner Projekt-Imports des Pakets gut genug arbeiten). Ich habe sogar die .class-Datei mit Eclipse überprüft, und die einzigen generierten Methoden sind die von Object. Irgendwelche Gedanken? Auch wenn ich tatsächlich zum "stateful" Teil meiner Clojure Klasse komme, hat irgendjemand irgendwelche Ideen? Danke im Voraus.

+0

Sie tatsächlich lassen Sie Clojure im Unterricht verwenden? Verdammt, hier drüben bestehen sie immer auf Java (naja, um fair zu sein, mittlerweile gibt es so viele JVM-Sprachen, dass man einer Klasse nicht wirklich erlauben kann, sie alle zu benutzen, ohne in eine rohe Unordnung zu geraten). – Cubic

+0

Ja. Es ist ziemlich aufregend, aber da es für meinen Professor so ein Risiko und ein Experiment ist, muss ich es im Grunde einfach aussehen lassen, wenn jemand anderes die Chance hat, es zu benutzen. Deshalb zögere ich, die Maven-Lösung unten zu übernehmen. Leiningen ist viel "schöner". – kwenholz

Antwort

2

Wenn ich Projekte schreibe, die sowohl Clojure als auch Java verwenden, dann benutze ich normalerweise Maven statt Leiningen - aus den einfachen Gründen, dass die meisten Java-Tools (z. B. Eclipse) Maven besser verstehen, als sie Leiningen derzeit verstehen.

Hier ist ein Beispiel pom.xml, die ich für polyglotte verwenden Clojure/Java-Projekte:

Beachten Sie die wichtigsten Funktionen:

  • Verwendung von clojure-maven-plugin
  • Konfiguration der Clojure-Quellenverzeichnisse, die als Ressourcen betrachtet werden sollen - dies stellt sicher s Die .clj-Dateien werden als Ressourcen behandelt, werden in allen produzierten .jar-Dateien gebündelt und können zur Laufzeit dynamisch geladen werden (dies könnte das Problem lösen, dass Java nicht erkennt.)
  • Inclusion of clojars .org als Repository - ziemlich wichtig für eine ernsthafte Clojure-Entwicklung!
+0

Danke für die Hilfe. Gibt es eine gute Quelle, um mit dieser Art von Arbeit zu beginnen? Deine pom.xml macht Sinn, aber ich kenne Maven überhaupt nicht. Kennst du einen guten Ort, um schnell zu lernen? Leiningen war großartig, bis dieses Problem aufkam. . . . – kwenholz

+0

Sie können Maven entweder mit der Befehlszeile (komplexer, leistungsfähiger) oder mit Ihrer IDE-Integration (einfacher, obwohl Sie möglicherweise in die Befehlszeile für erweiterte Operationen fallen) lernen. Ich habe es persönlich gelernt die IDE-Route mit Eclipse - siehe http://wiki.eclipse.org/Maven_Integration für Informationen und Tutorials – mikera

+0

Okay danke. Ich bin kein Fan von Eclipse, also werde ich es per Kommandozeile versuchen. Wenn ich es unter Maven zur Arbeit bringen kann (klingt wie es wird) und kann die Leiningen Lösung in den nächsten Tagen nicht funktionieren, dann werde ich Ihre als die Antwort markieren. Vielen Dank! – kwenholz

Verwandte Themen