clojure別のclojure実装Javaクラスを導入

1490 ワード

ちょっと早口ですが、そういうことです.
core.cljファイルではJavaクラスを使用します.このJavaクラス(MoveDailyAction)は同じプロジェクトのclojureコードコンパイルによって生成されます.clojure->java classは前のブログを参照してください.
clojure実装javaクラス
clojureで生成したJavaクラスのclassファイルを指定したディレクトリの下に置く必要があります.core.cljはこのclassファイルを参照することができる.これは主にleiningenエンジニアリングによって構成されています
1つ目はcompile-pathで設定する必要があります
:compile-path "%s/classy-files"
コンパイル結果は次のディレクトリに表示されます.
ls target/uberjar+uberjar/classy-files/kafka2hdfs/
core.class                        core$_main.class                  MoveDailyAction$_execute.class  MoveDailyAction$loading__4910__auto__.class
core$fn__48.class                 core$mk_topology.class            MoveDailyAction$fn__26.class
core__init.class                  core$submit_topology_BANG_.class  MoveDailyAction__init.class
core$loading__4910__auto__.class  MoveDailyAction.class             MoveDailyAction$_init.class

2つ目はjava-source-pathsで設定する必要があります
:java-source-paths ["%s/classy-files"]
は、最初のステップでコンパイルされたclassファイルを使用することができます.
注意::aot設定時に依存するclojureクラスは先にコンパイルする必要があるため、前に置く
:aot [kafka2hdfs.MoveDailyAction kafka2hdfs.core]

コマンドコンパイルを実行しましょう.
lein do clean, uberjar

完了します.
leiningen公式ドキュメントにはcompile-pathが記録されていません.githubのexampleを参照してください.
https://github.com/technomancy/leiningen/blob/master/sample.project.clj