を使用してJavaからClojureをコンパイルすることは正当clojure.lang.Compiler.compile
ですか?
clojure.lang.Compiler.load
私たちの Java アプリケーションは、マクロを含む .clj ソースを使用して Clojure オブジェクトのインスタンスを作成していましたproxy
。ここで、これらのオブジェクトをgen-class
ではなくを使用して AOT コンパイルしたいと考えていますproxy
。これは、.class ファイルを移動できるようにするためであり、後でオブジェクトをインスタンス化します。
これまでに私が管理した最善のclojure.lang.Compiler.compile
方法は、ローダーのクラスファイル (「my/domain/lib__init.class」) を作成するよう説得したことです。しかし、付随する .class ファイル (名前空間 (“my/domain/lib$fnname__1234.class”) 内の関数ごとに 1 つ) と、それぞれの .class ファイルのスタブ クラス ファイルを取得できなかったようですgen-class
。これは、 http://clojure.org/compilationにある非常に単純な最初の例を使用したサンドボックスにあります。compile-pathを正しく設定し、クラスパス内の何かに設定したと思いましたが、まだ問題があるかもしれません。
いずれにせよ、実際のアプリケーションは RCP (Eclipse) ベースです。これはおそらく、OSGI クラスローダのクラスパスに関して理解する必要があることを意味します。clojure.lang.Compiler.compile
それまでの間、直接使用することが有効なアプローチであるかどうか疑問に思っていますか?
編集:これで、すべての .class ファイルを生成できるようになりましたが、ドキュメント化されていないさまざまな初期化が必要でした。これは、メソッド onclojure.lang.Compiler
が内部的なものであることを示唆しています。*compile-path* を適切に設定し、*compile-files* を true に設定する必要がありました。
RT.var("clojure.core", "*compile-files*").bindRoot(true);