(私はこれがHow can I embed Clojure in an RCP applicationに関連して認識してんだけど、そのスレッドが古いと私のセットアップが多少異なる場合)私は、Eclipse 3.7.1を使用していClojureのクラスパスの問題
と日のために今持っていますClojureでEclipse/RCPアプリケーションを書くことを試みていました(可能な限り)。私はclojure.osgiとCCWのソースバージョンをビルドしようとしましたが、RCPClojureデモプロジェクトといくつかの他のことを試みました。それぞれの人が仕事をしませんでした(主に "修正不可能な"ビルド/クラスパスエラー、最新のドキュメント/レスポンスの欠如、バージョンの競合など...)
自分のステップで少なくとも50% :
はRCPこんにちはテンプレートを使用して、新しいプラグインプロジェクト
org.cljtest42
を作成Clojureの1.3.0のjarファイルをラップする新しいプラグインプロジェクト、設定プラグインIDorg.clojure.v1.3.0
を作成
- が(AOTのコンパイルを有効にする)CCWプロジェクトの本質を追加
org.clojure
プラグインの依存関係を追加し、このステップはまた、エクスポートしたパッケージにorg.cljtest42
を追加し、クラスパスをランタイムする/classes
フォルダを追加するには、[編集]plugin.xml
/classes
フォルダ- を追加します。
org.cljtest42
パッケージ/名前空間内の2つの単純なClojureのファイルを追加します。TestClass.clj:選択して
(ns org.cljtest42.TestClass (:gen-class)) (defn -main [greet] (println greet))
compile.clj
(ns org.cljtest42.compile) (dorun (map compile ['org.cljtest42.TestClass]))
トリガーAOTコンパイルプロジェクトノードを開き、「実行」>「Clojureアプリケーション」(
/classes
フォルダには、コンパイルされたclojureクラスが設定されます)。これまでのところ - (も)(Perspective.createInitialLayoutにしようとした、例えばスタートで())
とても良いActivator
クラスから
リファレンスTestClassを。
java.io.FileNotFoundException: Could not locate org/cljtest42/TestClass__init.class or org/cljtest42/TestClass.clj on classpath:
at clojure.lang.RT.load(RT.java:430)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)
at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:401)
at com.pspctclr.cljtest42.TestClass.<clinit>(Unknown Source)
より多くの知識豊富誰かがこの問題を克服することができる方法のいくつかのポインタを共有することができれば、それは優れた次のようになります。しかし、Eclipseアプリケーションは、常にこれに失敗したとして、このプロジェクトを実行しようとしています。 AOTコンパイルされたクラスが実際にクラスパスに終わっていない(なぜ?、/ classesが明示的に追加されているのか分かりません)か、別のClojureプラグインがEquinox/OSGIの方法でそれらにアクセスできないからです作品ですか?
ありがとうございます!
これは機能します。追加の注意がいくつかあります。 1)Clojureランタイムプラグインでは、jarファイル内のすべてのパッケージをエクスポートする必要があります。 2)ランタイムプラグインでは 'Eclipse-BuddyPolicy:registered'を使用し、従属プラグインでは' Eclipse-RegisterBudy'エントリを使用してください。 3)依存プラグインがClojureランタイムプラグインに直接依存しない他のプラグインによって呼び出された場合、依存プラグインはClojureランタイム依存関係を再エクスポートする必要があります。 – Bill
これはおそらく十分な回避策ですが、これを行う適切な方法は、Clojure AOTが実際に必要なインポートをバンドルに注入するためです。そのため、OSGi仕様の回りにEclipseバディを使用する必要はありません。しかし、これはClojure AOTに正しいことをさせる必要があります。 –
これはあなたがあなたのクローゼットコードをAOTに喜んでいることを前提としています。 – Bill