Clojureファイルから生成されたクラスを参照するJavaファイルでのLeiningenコンパイルエラー
-
27-10-2019 - |
質問
JavaファイルとClojureファイルの両方をコンパイルしているLeiningenプロジェクトがあります。Javaファイルは、Clojureファイル(gen-classを使用)から生成されたクラスの一部をインポートします。
lein compileを実行すると、Javaファイルのインポートでコンパイルエラーが発生します(クラスが見つからないという)。プロジェクトからJavaファイルを削除し、leinコンパイルを実行し、Javaファイルを追加し直して、leinコンパイルを再度実行すると、すべてが正常に機能します。
つまり、Javaファイルの前にClojureファイルをコンパイルする必要があるようなものです。
ちなみに、genクラスのClojureファイルを:aotリストに含めています。
ここで何が問題になっていますか?
解決
(この回答のコードはテストされていませんが、Leiningen 1.x(xの最近の値の場合)で動作するはずです。)
Leiningenのcompile
タスクは、javac
がproject.clj
を指定している場合、:java-source-path
タスクを自動的に実行します。これは、Clojureソースをコンパイルする前に行います。これは、依存関係の通常の方向であると思われるためです。
これを回避するには、フックを使用できます: ジェネラコディセタグプレ
これをビルド時のクラスパスのどこかに配置して追加します ジェネラコディセタグプレ
プロジェクトマップへ。
javac
は、直接呼び出された場合でも、compile
を呼び出さないことに注意してください。また、compile
と同等にすることもできます。次の関数でフックします:
ジェネラコディセタグプレ
この場合、compile-clj-first-hook
の最後の形式は次のようになります
ジェネラコディセタグプレ
(compile
を 呼び出しないようにすると、javac
/ jar
が破損する可能性があります。)