【发布时间】:2010-10-22 14:42:07
【问题描述】:
我有一个使用 Maven 构建为 JAR 文件的 Clojure 程序。 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"))))
但有人告诉我,在 defn 内使用 def 是不好的业力。
在运行时设置常量的 Clojure 惯用方法是什么?我显然没有将构建版本信息作为def 嵌入到我的代码中,但我希望在程序启动时从main 函数中设置一次(并且一劳永逸)。然后它应该以def 的形式提供给其余正在运行的代码。
更新:顺便说一句,Clojure 一定是我很长一段时间以来遇到的最酷的语言之一。向 Rich Hickey 致敬!
【问题讨论】: