Я написал несколько небольших служебных приложений в Clojure, которые я компилирую в автономные исполняемые файлы JAR («uberjars»), используя Maven и maven-shade-plugin. Эти uberjars содержат распакованные версии clojure.jar и других библиотек (например, commons-cli), от которых зависит приложение. Они удобны тем, что я могу отправить их клиенту, не требуя от него установки Clojure (все клиенты уже установили JRE).
Я обнаружил, что запуск приложений Clojure занимает несколько секунд, тогда как аналогичные приложения, написанные на Java, запускаются за доли секунды на тех же компьютерах (например, время, чтобы показать сообщение об использовании).
Я подозреваю, что это потому, что Clojure на лету компилирует некоторый код в библиотеке clojure.core, поскольку в файле clojure.jar есть исходный код (.clj
файлы).
Есть ли способ предварительно скомпилировать этот исходный код? Можно ли что-то еще сделать, чтобы ускорить производительность при запуске? Я слышал жалобы от клиентов о том, сколько времени занимает запуск (и они не знают или не заботятся о том, что приложение написано на Clojure, Java или Foobar).