在应用程序中嵌入来自leiningen项目的版本字符串

MrE*_*vil 11 clojure leiningen

我希望能够查询或嵌入由leiningen项目设置的版本字符串,并将该值显示给用户.用途包括从CLI显示版本字符串,或作为环形应用程序中的标题显示.这可能吗?

小智 8

如果您在Leiningen内部使用lein run等运行,它可以作为系统属性使用:(System/getProperty "myproject.version").如果你正在制作一个罐子,你需要阅读pom.properties.


ama*_*loy 6

我喜欢technomancy的回答,但我不得不去查找如何“阅读pom.properties”。原来对于maven神器com.example/my-project,classpath下有一个文件

META-INF/maven/com.example/my-project/pom.properties
Run Code Online (Sandbox Code Playgroud)

您可以将其读入 java.util.Properties 并获取“版本”键。

(ns com.example.version
  (:require [clojure.java.io :as io])
  (:import (java.util Properties)))

(defn read-project-version [groupid artifact]
  (-> (doto (Properties.)
        (.load (-> "META-INF/maven/%s/%s/pom.properties"
                 (format groupid artifact)
                 (io/resource)
                 (io/reader))))
    (.get "version")))
Run Code Online (Sandbox Code Playgroud)