Установка «постоянных» Clojure во время выполнения

У меня есть программа Clojure, которую я создаю как файл JAR, используя Maven. В JAR Manifest встроен номер версии сборки, включая метку времени сборки.

Я легко могу прочитать это во время выполнения из JAR Manifest, используя следующий код:

(defn set-version
  "Set the version variable to the build number."
  []
  (def version
    (-> (str "jar:" (-> my.ns.name (.getProtectionDomain)
                                   (.getCodeSource)
                                   (.getLocation))
                    "!/META-INF/MANIFEST.MF")
      (URL.)
      (.openStream)
      (Manifest.)
      (.. getMainAttributes)
      (.getValue "Build-number"))))

но мне сказали, что это плохая карма, чтобы использоватьdef внутриdefn.

Как Clojure-идиоматический способ установить константу во время выполнения? У меня, очевидно, нет информации о версии сборки для встраивания в мой код какdef, но я бы хотел, чтобы он был установлен раз и навсегдаmain функция при запуске программы. Затем он должен быть доступен какdef к остальной части работающего кода.

ОБНОВИТЬ: Кстати, Clojure должен быть одним из самых крутых языков, с которыми я сталкивался довольно давно. Слава Ричу Хикки!

Ответы на вопрос(4)

Ваш ответ на вопрос