2012-11-03 52 views
5

對於一個類,我需要編寫一些JVM代碼,並且我希望使用Clojure。我將它與軟件堆棧的底部一起工作,但我無法使它在位於頂部和底部的GUI層之間工作。我的主要問題是讓Java GUI識別我的Clojure文件。我想爲此使用Leiningen,但Java編譯解決方案似乎沒有考慮到這種互操作性。答案here似乎正是我所需要的。我不明白在哪裏放置代碼等等(只是不夠詳細)。有沒有人有任何提示?Java與Leiningen之間的夾層Clojure

我試着製作一個plugin,但它似乎沒有工作。我知道我的情況肯定是在問題的邊緣,但一個解決方案將使在教室使用Clojure更容易。

謝謝!

更多細節:

我沒有多少運氣使用Clojure的編譯罐子。我需要創建一個(呃)有狀態的Clojure類(即方法不能是靜態的)。我的類的代碼中(src/final_project/MyLinkLayer.clj)看起來像

(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))) 

我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]) 

類編譯( 「雷音編譯」)細到「目標/班/ final_project /「,但方法不顯示。我可以通過jar來加載這個類(在項目的頂部Java部分使用Maven來導入包工作就足夠了)。我甚至用Eclipse檢查過.class文件,而生成的唯一方法是來自Object的。有什麼想法嗎?另外,一旦我真正到達Clojure課程的「有狀態」部分,有沒有人有任何想法?提前致謝。

+0

他們居然讓你在課堂上使用Clojure?該死的,在這裏,他們始終堅持的Java(井是公平的,現在有這麼多的JVM語言,你真的不能讓一個類來使用所有這些,而不會在一個爛攤子王室)。 – Cubic

+0

是的。這是非常令人興奮的,但因爲它是我的教授這樣的風險和實驗,我基本上要使它看起來容易,如果任何人有過使用它的機會。這是我爲什麼猶豫採用下面的Maven解決方案的一部分。萊寧寧很「好」。 – kwenholz

回答

2

當我寫的是同時使用的Clojure和Java項目,然後我通常使用Maven而非Leiningen - 很簡單的原因,大部分的Java工具(例如Eclipse的)理解Maven的比他們更好的理解Leiningen目前。

這裏有一個例子pom.xml中,我使用的多語種的Clojure/Java項目:

注意的關鍵特性:

使用 clojure-maven-plugin
    • Clojure源代碼目錄的配置被視爲資源 - 這可以確保S中的.clj文件被看作是資源,在生產的任何.jar文件捆綁在一起,並可以在運行時動態加載(這可能會解決你的Java沒有認識到你的.clj文件看到的問題)clojars的
    • 入選.org作爲存儲庫 - 對於嚴肅的Clojure開發來說非常重要!
  • +0

    感謝您的幫助。有沒有很好的資源來開始這種工作?你的pom.xml是有道理的,但我對Maven一點都不熟悉。你知道快速開始學習的好地方嗎?在這個問題出現之前,Leiningen一直很棒。 。 。 。 – kwenholz

    +0

    您可以通過使用命令行(更復雜,更強大)或使用IDE集成(更簡單,但可能需要放入命令行以獲取更高級操作)來了解Maven。我親自了解它使用Eclipse的IDE路由 - 請參閱http://wiki.eclipse.org/Maven_Integration獲取信息和教程 – mikera

    +0

    好的,謝謝。我不是Eclipse的粉絲,所以我會嘗試通過命令行。如果我能在Maven下工作(聽起來像是這樣),並且在接下來的幾天裏無法使Leiningen解決方案工作,那麼我會將你的答案標記爲答案。謝謝! – kwenholz