Definindo "constantes" do Clojure em tempo de execução

Eu tenho um programa Clojure que eu construo como um arquivo JAR usando o Maven. Incorporado no manifesto JAR está um número da versão de construção, incluindo o carimbo de data / hora da construção.

Eu posso ler isso facilmente em tempo de execução no manifesto JAR usando o seguinte código:

(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"))))

mas me disseram que é um karma ruim usardef dentrodefn.

Qual é a maneira idiomática de Clojure para definir uma constante no tempo de execução? Obviamente, não tenho as informações da versão de compilação para incorporar no meu código como umdef, mas gostaria que fosse definido uma vez (e para todos) a partir domain função quando o programa é iniciado. Ele deve estar disponível como umdef para o restante do código em execução.

ATUALIZAR: Aliás, o Clojure deve ser uma das linguagens mais legais que já encontrei há um bom tempo. Parabéns ao Rich Hickey!

questionAnswers(4)

yourAnswerToTheQuestion