Установка «постоянных» 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 должен быть одним из самых крутых языков, с которыми я сталкивался довольно давно. Слава Ричу Хикки!