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. ビューのflipper ontouchに文字列を埋め込みます
- 2. 埋め込みVaadinアプリケーションの文字エンコーディングを変更する
- 3. 埋め込みC++ソフトウェアの文字セット
- 4. NSString埋め込み/文字間のスペース
- 5. 可変幅の文字列の埋め込み
- 6. VIMでの文字列の書式設定(埋め込み)
- 7. スカラマップ、文字列への記号キーの埋め込み
- 8. 埋め込み変数を含むRuby文字列
- 9. 埋め込みブートストラップレイアウトの埋め込み
- 10. 埋め込みプロジェクトをソースコードで探す
- 11. C#.net埋め込み編集可能な文字列
- 12. Grails Gorm MongoDBインデックス埋め込み文字列マップ
- 13. mongodb内のドキュメント内の埋め込み配列フィールドを照会
- 14. 埋め込みyoutubeをc/gtkアプリケーションに埋め込む
- 15. 1つの文字列に2つの埋め込みフォントを使用する
- 16. pdf埋め込み/埋め込み
- 17. 埋め込まれた文字列を連結する
- 18. Windows 8アプリケーションの埋め込みデータベース
- 19. 埋め込みアプリケーション用のオーディオ(MP3)コーデック
- 20. PhoneGapアプリケーション用PDF Viewerの埋め込み
- 21. TwoFishの平文ブロックの埋め込み
- 22. 別の再生時にYouTubeのiframe埋め込みを埋め込みます
- 23. Clojureの読み込み文字列と読み込み文字列の違い
- 24. thickbox埋め込みタグの内容を読み込めません
- 25. ListViewを文字列配列で埋め込む方法は?
- 26. カーソルから2次元文字列配列を埋め込む
- 27. モンゴイド埋め込み文書のタイムスタンプ
- 28. マングース:Main.save上の埋め込み文書
- 29. MongoDB - 埋め込み文書のクエリ
- 30. C++アプリケーション内にデータを埋め込む
不幸にも、次のように出力されます。nil、w AOTクラスのuberjarでjavaを使用して呼び出された: '(println" blargl "(.getSpecificationVersion(.getPackage(class * ns *)))" \ n "))' – MrEvil