(Код в этом ответе не проверен, хотя, надеюсь, он должен работать с Leiningen 1.x (для последних значений x).)
Задача Leiningen compile
запускает задачу javac
автоматически, если ваш project.clj
указывает :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
должна быть
(javac/javac (assoc project ::clj-compiled? true))
(Выполнение compile
, а не вызов javac
вообще может сломаться jar
/ uberjar
.)