我希望能夠查詢或嵌入由leiningen項目設置的版本字符串並將該值顯示給用戶。用途包括顯示CLI中的版本字符串,或者作爲環形應用程序中的標題。這可能嗎?從應用程序中的leiningen項目嵌入版本字符串
回答
如果你在裏面Leiningen使用lein run
或運行的更優雅的解決方案短例如,它可以作爲系統屬性提供:(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。示例/我的項目,還有正在
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
它適用於雷音項目,雷音並從uberjar都在運行。 使用它像以下(從GitHub的頁面獲取):
添加到您的project.clj:
[trptcolin/versioneer "0.2.0"]
然後,在你的代碼,做這樣的事情,在組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" ...
,當你運行-main
它會打印:
abc 1.2.3
- 1. 使用Swift在字符串內插入應用程序版本?
- 2. 從Phonegapp讀取Bundle版本和Bundle版本字符串應用程序的iPad
- 3. 從Emacs的Leiningen項目中使用Java
- 4. 如何查詢實際的應用程序版本字符串?
- 5. Xcode 4將應用程序版本嵌入到iOS應用程序中
- 6. 使用Android應用程序嵌入WebKit的新版本
- 7. 如何在java類中嵌入版本字符串
- 8. 從應用程序購買項目中刪除從新的應用程序版本
- 9. 嵌入版本控制內的應用程序
- 10. 在React應用程序中嵌入字體的選項?
- 11. 如何使Flash項目嵌入到桌面應用程序中?
- 12. 在ASP.NET Core 1.0.0 web應用程序中顯示項目版本
- 13. 在ASP.NET MVC Core應用程序(RC2)中顯示項目版本
- 14. 在elixir應用程序中訪問項目版本
- 15. 項目屬性設置爲一個非文本字符串似乎不leiningen
- 16. 本地化ASP.NET MVC應用程序的母版頁中的字符串
- 17. 從應用程序中獲取grails應用程序版本
- 18. 用戶輸入字符串保存爲應用程序首選項中的URL
- 19. 使用Burn Bootstrapper項目獲取應用程序版本
- 20. 嵌入字符串
- 21. 將公鑰作爲字符串嵌入到Paramiko應用程序中
- 22. 從字符串中刪除序列中的項目Python
- 23. 從字符串中刪除項目
- 24. 從IOS應用程序中的字符串中刪除'\'
- 25. 從我的應用程序的項目
- 26. Silverlight應用程序中的字符串本地化問題
- 27. 更改谷歌應用程序腳本中的字符串值
- 28. 使用目標創建應用程序的精簡版版本
- 29. 輸出當前應用程序的版本爲一個字符串 - Xamarin.iOS
- 30. 更改嵌入式Vaadin應用程序的字符編碼
不幸它似乎不起作用,下面返回nil,w母雞在AOT類的uberjar上使用java調用: '(println「blargl」(.getSpecificationVersion(.getPackage(class * ns *)))「\ n」))' – MrEvil