(それがうまくいけば()xの最近の値についてLeiningenを1.xではで動作するはずですが、この答えのコードは、テストされていません。)あなたのproject.clj
指定する場合
Leiningenをのcompile
タスクは自動的にjavac
タスクを実行しますa :java-source-path
。これは、Clojureソースをコンパイルする前に、依存関係の通常の方向だと考えているからです。ビルド時のクラスパスに
;;; in leiningen.hooks.clj_first.clj
(ns leiningen.hooks.clj-first
(:require [leiningen.compile :as leinc]
[leiningen.javac :as javac]))
(defn compile-clj-first-hook [compile-task project & args]
(apply compile-task
(dissoc project :java-source-path)
args))
(javac/javac project))
(add-hook #'leiningen.compile/compile compile-clj-first-hook)
置き、このどこかに、プロジェクトのマップに
:hooks [clj-first-hook]
を追加します。
はこれを回避するには、フックを使用することができます。
javac
は、直接呼び出された場合でも、依然としてcompile
を呼び出さないことに注意してください。 compile
と同等にすることもできます。次の関数でそれをフックして:
(defn javac-hook [javac-task project]
(if (project ::clj-compiled?)
(javac/javac project)
(leinc/compile project)))
compile-clj-first-hook
の最後の形式は、(。全くcompile
ないコールjavac
はおそらくjar
/uberjar
を破る作る)
(javac/javac (assoc project ::clj-compiled? true))
する必要があります
おそらくあなたを助けることはありませんが、私はClojureをJavaに依存させるのが通常簡単であることを発見しました。 d。そして、多言語プロジェクトの周期的な依存関係は、特に厄介です... – mikera
これはこれまでうまく動作しましたか?私は基本的に同じ問題を抱えています。それに対処しようとしています(ここでは、http://stackoverflow.com/questions/13205723/sandwiching-clojure-between-java-with-leiningen/13205871#13205871)。 – kwenholz
私はあなたに真実を伝えるのを忘れない。 –