Configuración de "constantes" de Clojure en tiempo de ejecución

Tengo un programa Clojure que construyo como un archivo JAR usando Maven. Incrustado en el Manifiesto JAR hay un número de versión de compilación, que incluye la marca de tiempo de compilación.

Puedo leer esto fácilmente en tiempo de ejecución del manifiesto JAR usando el siguiente 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"))))

pero me han dicho que usar karma es malodef dentrodefn.

¿Cuál es la forma idiomática de Clojure de establecer una constante en tiempo de ejecución? Obviamente no tengo la información de la versión de compilación para incrustar en mi código comodef, pero me gustaría configurarlo una vez (y para siempre) desdemain funcionan cuando se inicia el programa. Entonces debería estar disponible comodef al resto del código en ejecución.

ACTUALIZAR: Por cierto, Clojure tiene que ser uno de los idiomas más geniales que he encontrado en mucho tiempo. Felicitaciones a Rich Hickey!

Respuestas a la pregunta(4)

Su respuesta a la pregunta