leiningenプロジェクトで設定したバージョン文字列を照会または埋め込み、その値をユーザーに表示したいと考えています。 CLIからのバージョン文字列の表示、またはリングアプリケーションのヘッダーとしての使用が含まれます。これは可能ですか?アプリケーション内のleiningenプロジェクトのバージョン文字列を埋め込みます
答えて
あなたがlein run
または使用してLeiningenを内部で実行している場合それはシステムプロパティとして利用可能です:(System/getProperty "myproject.version")
。あなたが瓶を生産しているなら、pom.properties
を読む必要があります。
jarファイルを作成する場合は、extract the current version from the jar fileとすることができます。
そうでなければ、AOTを実行していない場合はread
project.cljファイル(マップなので)でバージョンを抽出することができます。
私は確信(他の誰かがこの、ヒントヒントを書きたい場合を除き...)このためLeiningenをプラグインを書くのよりエレガントな解決策の短いがあると思います
私はtechnomancyの答えが好きですが、私は "pom.properties
を読む"を調べる必要がありました。これは、Mavenのアーティファクトcom.example /私のプロジェクトのために、あなたはjava.util.Propertiesに読み込まれ、「バージョン」のキーを取得することができます
META-INF/maven/com.example/my-project/pom.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
それは両方がレインにしてuberjarから実行している、レインのプロジェクトのために働きます。 は(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"
これはまだ動作し、最も簡単ですこれまでの選択。 – jwhitlark
project.clj
ファイルは、コンパイルとjarファイル中に読み込まれることに注意することは、単純に文字列が含まれている、私は私のプロジェクト名とバージョンを読み込む方法です:
(defmacro proj-version []
(some->> (slurp "project.clj") clojure.edn/read-string (drop 1) (take 2) (str/join " ")))
(defn -main []
(println (proj-version))
そう(defproject abc "1.2.3" ...
ために、とき
- 1. 文字列内の文字間の埋め込み
- 2. OrientDB埋め込みリスト(文字列):ワイルドカードクエリ
- 3. jsonの文字列をチャートチャートに埋め込みますか?
- 4. ビューのflipper ontouchに文字列を埋め込みます
- 5. 埋め込みVaadinアプリケーションの文字エンコーディングを変更する
- 6. html埋め込み文字列内のswift変数を連結します。
- 7. NSString埋め込み/文字間のスペース
- 8. 埋め込みC++ソフトウェアの文字セット
- 9. スカラマップ、文字列への記号キーの埋め込み
- 10. VIMでの文字列の書式設定(埋め込み)
- 11. 可変幅の文字列の埋め込み
- 12. Objectlistviewツールチップの文字列の埋め込み
- 13. MD5ハッシング中の文字列の埋め込み
- 14. 埋め込みCで文字列に変数を渡す
- 15. mongodbへの配列の埋め込み埋め込み
- 16. 埋め込みブートストラップレイアウトの埋め込み
- 17. 埋め込み変数を含むRuby文字列
- 18. Power Bi内部アプリケーションと外部アプリケーションの埋め込み
- 19. 埋め込みプロジェクトをソースコードで探す
- 20. 別のクラスのコンストラクタを使用した文字列配列の埋め込み
- 21. 埋め込みyoutubeをc/gtkアプリケーションに埋め込む
- 22. mongodb内のドキュメント内の埋め込み配列フィールドを照会
- 23. C#.net埋め込み編集可能な文字列
- 24. Grails Gorm MongoDBインデックス埋め込み文字列マップ
- 25. Podio - 埋め込みフィールド - 空文字列問題
- 26. 埋め込み文字列配列を配列javascriptに変換する方法
- 27. AppEngineアプリケーションへのデータスタジオレポートの埋め込み
- 28. テンソルフロー内の複数の埋め込みからのルックアップの埋め込み
- 29. 1つの文字列に2つの埋め込みフォントを使用する
- 30. pdf埋め込み/埋め込み
不幸にも、次のように出力されます。nil、w AOTクラスのuberjarでjavaを使用して呼び出された: '(println" blargl "(.getSpecificationVersion(.getPackage(class * ns *)))" \ n "))' – MrEvil