5

クラスのために、JVM コードを書く必要があり、Clojure を使用したいと考えています。ソフトウェアスタックの下部で動作するようになりましたが、上部と下部にある GUI レイヤーの間で動作させることができません。私の主な問題は、Java GUI に Clojure ファイルを認識させることです。これには Leiningen を使用したいのですが、Java コンパイル ソリューションはこの相互運用性を考慮していないようです。ここでの答えは、まさに私が必要としているもののようです。コードなどをどこに置くべきかわかりません(詳細が十分ではありません)。誰にもヒントはありますか?

プラグインを作ってみたのですが、うまくいきません。私のケースが間違いなく問題の周辺にあることはわかっていますが、解決策があれば、教室での Clojure の使用がはるかに簡単になります。

ありがとう!

詳細:

コンパイル済みの Clojure jar を使用することはあまりうまくいきませんでした。(うーん) ステートフルな 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])

クラスは "target/classes/final_project/" にうまくコンパイル ("lein compile") されますが、メソッドは表示されません。jar を介してクラスをロードできます (パッケージのプロジェクト インポートの最上位の Java 部分で Maven を使用すると、十分に機能します)。Eclipse で .class ファイルをチェックしたところ、生成されたメソッドは Object からのものだけでした。何かご意見は?また、実際に Clojure クラスの「ステートフル」な部分に到達したら、何かアイデアはありますか? 前もって感謝します。

4

1 に答える 1

2

Clojure と Java の両方を使用するプロジェクトを作成するときは、通常、Leiningen ではなく Maven を使用します。これは、ほとんどの Java ツール (Eclipse など) が現在 Leiningen よりも Maven をよく理解しているという単純な理由によるものです。

多言語 Clojure/Java プロジェクトで使用する pom.xml の例を次に示します。

主な機能に注意してください。

  • の使用clojure-maven-plugin
  • リソースと見なされる Clojure ソース ディレクトリの構成 - これにより、.clj ファイルがリソースとして扱われ、生成された .jar ファイルにバンドルされ、実行時に動的にロードできることが保証されます (これにより、Java で発生している問題が解決される場合があります)。 .clj ファイルを認識します)
  • リポジトリとしての clojars.org の組み込み - 本格的な Clojure 開発に不可欠です!
于 2012-11-03T04:14:18.737 に答える