Desidero poter interrogare o incorporare la stringa di versione impostata dal progetto leiningen e visualizzare tale valore all'utente. Gli usi includono la visualizzazione della stringa di versione dalla CLI o come intestazione in un'applicazione ad anello. È possibile?Stringa di versione incorporata dal progetto leiningen nell'applicazione
risposta
Se si sta eseguendo all'interno Leiningen utilizzando lein run
o come, è disponibile come una proprietà di sistema: (System/getProperty "myproject.version")
. Se stai producendo un barattolo devi leggere pom.properties
.
se si crea un file jar è possibile extract the current version from the jar file.
altrimenti, se non si esegue AOT, è possibile read
il file project.clj (perché è una mappa) e quindi estrarre la versione.
ho certezza spero ci sia un più elegante breve soluzione di scrivere plugin Leiningen per questo (a meno che qualcun altro vuole a scrivere questo, suggerimento suggerimento ..)
Mi piace la risposta di tecnomanzia, ma ho dovuto andare a cercare "leggere pom.properties
". Si scopre che per il manufatto com.example/my-progetto di Maven, c'è un file sul classpath sotto
META-INF/maven/com.example/my-project/pom.properties
che si può leggere in un java.util.Properties e ottenere una chiave "versione" .
(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")))
Qualcuno ha scritto una bella libreria per la manipolazione di questo: https://github.com/trptcolin/versioneer
Si lavora per progetti Lein, sia in esecuzione in Lein e da un uberjar. Usalo come il seguente (preso dalla pagina Github):
Aggiungi questo al vostro project.clj:
[trptcolin/versioneer "0.2.0"]
Poi, nel codice, fare qualcosa di simile, dove il gruppo-ID e ARTIFACT-ID sono i soliti identificatori Leiningen/Maven per il tuo progetto .
user=> (require '[trptcolin.versioneer.core :as version]) nil user=> (version/get-version "GROUP-ID" "ARTIFACT-ID") "1.2.3-SNAPSHOT"
Questo funziona ancora ed è il più semplice scelta di gran lunga. – jwhitlark
Ecco come ho letto il mio nome del progetto e la versione, si noti che il file project.clj
viene letto durante il file di compilazione e jar semplicemente contiene la stringa:
(defmacro proj-version []
(some->> (slurp "project.clj") clojure.edn/read-string (drop 1) (take 2) (str/join " ")))
(defn -main []
(println (proj-version))
così per (defproject abc "1.2.3" ...
, quando si eseguire -main
verrà stampato:
abc 1.2.3
- 1. Progetto a livello Leiningen Plugin
- 2. rimozione del progetto IntelliJ dal controllo versione
- 3. Versione di proprietà non dati incorporata?
- 4. come rimuovere versione XML stringa dal String
- 5. Quale versione di Entity Framework viene utilizzata dal mio progetto?
- 6. Rileva la versione di Visual Studio dal progetto MSBuild
- 7. Ordine di compilazione di Leiningen?
- 8. Installazione di librerie con leiningen senza creare il progetto
- 9. File di progetto con solo file e nessuna uscita incorporata
- 10. Come aggiungere test unitari a un progetto Leiningen?
- 11. Lavorare con Java Emacs nell'ambito del progetto Leiningen
- 12. Leiningen,: warn-on-reflection. Richiesto per il progetto corrente solo
- 13. definire le attività specifiche del progetto in leiningen
- 14. Applicazione di profiling incorporata
- 15. Automazione della gestione delle dipendenze locali di Leiningen
- 16. Push to Nexus Utilizzo di Leiningen
- 17. Come sapere quale versione di tomcat è stata incorporata nell'innesto di primavera
- 18. ottiene la risorsa incorporata in un altro progetto
- 19. Quali sono i repository predefiniti di leiningen?
- 20. Qualsiasi progetto di lavoro Red5 Progetto per versione 0.9
- 21. Eseguire un segue genitore dal controller vista incorporata
- 22. Rimuovi controllo versione progetto IntelliJ
- 23. Verifica VS versione di un progetto C#
- 24. Versione del progetto di accesso nell'applicazione elixir
- 25. Clojure Leiningen installazione offline
- 26. Nome della risorsa incorporata
- 27. Ottenere la versione di assemblaggio di un altro progetto (.exe)
- 28. Perdita di memoria IronPython incorporata
- 29. Come ottenere la versione del progetto dal pom di Mavens in Ant
- 30. Python ha una funzione incorporata per estrarre una stringa multilinea?
Sfortunatamente sembra non funzionare, il seguente ritorna nil, w hen ha chiamato java su un uberjar da una classe AOT: '(println" blargl "(.getSpecificationVersion (.getPackage (class * ns *)))" \ n "))' – MrEvil