leiningen プロジェクトによって設定されたバージョン文字列をクエリまたは埋め込み、その値をユーザーに表示できるようにしたいと考えています。用途には、CLI からのバージョン文字列の表示、またはリング アプリケーションのヘッダーとしての表示が含まれます。これは可能ですか?
5 に答える
などを使用してLeiningen内で実行している場合はlein run
、システムプロパティとして使用できます(System/getProperty "myproject.version")
。あなたが瓶を生産しているならば、あなたは読む必要がありますpom.properties
。
私はテクノマンシーの答えが好きですが、「読むpom.properties
」方法を調べなければなりませんでした。Mavenアーティファクトcom.example/my-projectの場合、クラスパスの下にファイルがあることがわかります
META-INF/maven/com.example/my-project/pom.properties
これを 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")))
誰かがこれを処理するための素晴らしいライブラリを作成しました: https://github.com/trptcolin/versioneer
これは、lein と uberjar の両方で実行されている lein プロジェクトで機能します。次のように使用します (Github ページから取得)。
これを project.clj に追加します。
[trptcolin/versioneer "0.2.0"]
次に、コードで次のようにします。GROUP-ID と ARTIFACT-ID は、プロジェクトの通常の Leiningen/Maven 識別子です。
user=> (require '[trptcolin.versioneer.core :as version]) nil user=> (version/get-version "GROUP-ID" "ARTIFACT-ID") "1.2.3-SNAPSHOT"
jar ファイルをビルドすると、jar ファイルから現在のバージョンを抽出できます。
それ以外の場合は、AOT を実行していない場合はread
、project.clj ファイル (マップであるため) からバージョンを抽出できます。
このための leiningen プラグインを作成する以外に、より洗練された解決策があることを願っています (他の誰かがこれを書きたいと思わない限り、ヒントのヒント..)