Программа Clojure, читая ее собственный MANIFEST.MF

Как программа 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"))

Спасибо.

5
задан Ralph 1 May 2010 в 18:13
поделиться

2 ответа

Похоже, это работает надежно:

(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")))
3
ответ дан 14 December 2019 в 04:32
поделиться

Я нашел ответ, который работает, однако я открыт для предложений по его улучшению, в частности, замене вызова 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")))
0
ответ дан 14 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: