Clojureファイルから生成されたクラスを参照するJavaファイルでのLeiningenコンパイルエラー

StackOverflow https://stackoverflow.com/questions/9336202

質問

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タスクは、javacproject.cljを指定している場合、:java-source-pathタスクを自動的に実行します。これは、Clojureソースをコンパイルする前に行います。これは、依存関係の通常の方向であると思われるためです。

これを回避するには、フックを使用できます: ジェネラコディセタグプレ

これをビルド時のクラスパスのどこかに配置して追加します ジェネラコディセタグプレ

プロジェクトマップへ。

javacは、直接呼び出された場合でも、compileを呼び出さないことに注意してください。また、compileと同等にすることもできます。次の関数でフックします: ジェネラコディセタグプレ

この場合、compile-clj-first-hookの最後の形式は次のようになります ジェネラコディセタグプレ

compile 呼び出しないようにすると、javac / jarが破損する可能性があります。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top