Как программа Clojure может найти свой собственный MANIFEST.MF (предполагающий, что она упаковывается в файле JAR).
Я пытаюсь сделать это от мой "-основная" функция, но я не могу найти, что класс использует в следующем коде:
(.getValue
(..
(java.util.jar.Manifest.
(.openStream
(java.net.URL.
(str
"jar:"
(..
(class **WHAT-GOES-HERE**)
getProtectionDomain
getCodeSource
getLocation)
"!/META-INF/MANIFEST.MF"))))
getMainAttributes)
"Build-number"))
Спасибо.
Похоже, это работает надежно:
(defn set-version
"Set the version variable to the build number."
[]
(def version
(.getValue (.. (Manifest.
(.openStream
(URL.
(str "jar:"
(.getLocation
(.getCodeSource
(.getProtectionDomain org.example.myproject.thisfile)))
"!/META-INF/MANIFEST.MF"))))
getMainAttributes)
"Build-number")))
Я нашел ответ, который работает, однако я открыт для предложений по его улучшению, в частности, замене вызова Class/forName
.
(defn -main [& args]
(println "Version "
(.getValue
(..
(Manifest.
(.openStream
(URL.
(str
"jar:"
(..
(Class/forName "org.example.myproject.thisfile")
getProtectionDomain
getCodeSource
getLocation)
"!/META-INF/MANIFEST.MF"))))
getMainAttributes)
"Build-number")))