Quiero poder consultar o insertar la cadena de versión establecida por el proyecto de leiningen y mostrar ese valor al usuario. Los usos incluyen mostrar la cadena de versión de la CLI, o como un encabezado en una aplicación de anillo. es posible?Incrustar cadena de versión del proyecto Leiningen en la aplicación
Respuesta
Si está ejecutando dentro de Leiningen usando lein run
o la como, está disponible como una propiedad del sistema: (System/getProperty "myproject.version")
. Si está produciendo un frasco, debe leer pom.properties
.
si construye un archivo jar puede extract the current version from the jar file.
de lo contrario, si no está haciendo AOT, entonces puede read
el archivo project.clj (porque es un mapa) y luego extraer la versión.
I certeza espero que haya una solución más elegante corto de escribir un plugin para este Leiningen (a menos que alguien quiere escribir esto, pista pista ..)
Me gusta la respuesta de technomancy, pero tuve que buscar cómo "leer pom.properties
". Resulta que para el artefacto com.example/mi-proyecto Maven, hay un archivo en la ruta de clases bajo
META-INF/maven/com.example/my-project/pom.properties
que se puede leer en un java.util.Properties y obtener una llave "versión" .
(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")))
Alguien ha escrito una buena biblioteca para manejar esto: https://github.com/trptcolin/versioneer
funciona para proyectos Lein, ambos corriendo en Lein y desde un uberjar. Se usa como la siguiente (tomado de la página de Github):
Agregue esto a su project.clj:
[trptcolin/versioneer "0.2.0"]
Luego, en el código, hacer algo como esto, donde GRUPO-ID y ARTIFACT-ID son los identificadores habituales de Leiningen/Maven para su proyecto .
user=> (require '[trptcolin.versioneer.core :as version]) nil user=> (version/get-version "GROUP-ID" "ARTIFACT-ID") "1.2.3-SNAPSHOT"
Esto sigue funcionando, y es el más fácil elección por ahora. – jwhitlark
Aquí es cómo leo mi nombre del proyecto y la versión, tenga en cuenta que el archivo project.clj
se lee durante archivo de compilación y tarro simplemente contiene la cadena:
(defmacro proj-version []
(some->> (slurp "project.clj") clojure.edn/read-string (drop 1) (take 2) (str/join " ")))
(defn -main []
(println (proj-version))
así que para (defproject abc "1.2.3" ...
, cuando ejecutar -main
se imprimirá:
abc 1.2.3
- 1. ¿Cómo incrustar la versión de proyecto de arquetipo en el arquetipo de Maven?
- 2. Trabajar con Java desde Emacs dentro del proyecto Leiningen
- 3. a nivel de proyecto Leiningen Plugin
- 4. iOS versión de la aplicación
- 5. Dónde encontrar números de versión válidos para dependencias en Leiningen
- 6. ¿Incrustar V8 en la aplicación OpenCL?
- 7. ¿Cómo cambiar programáticamente la versión del producto de un proyecto?
- 8. Cómo incrustar iPhone-Wax en la aplicación
- 9. Incrustar la aplicación XULRunner en Java
- 10. ¿Cómo mostrar la versión actual del proyecto de mi aplicación al usuario?
- 11. Dependencia del proyecto Maven contra JDK versión
- 12. Incrustar una versión más nueva de WebKit con la aplicación de Android
- 13. Leiningen: ¿cómo matar el proceso del niño?
- 14. Cómo incrustar un ejecutable en mi proyecto
- 15. ¿Cómo ejecutar código con Leiningen?
- 16. Incrementando la versión del Proyecto Maven con Jenkins/Git
- 17. Heroku, ¿Cómo saber la versión ruby del proyecto?
- 18. ¿Cómo agrego pruebas unitarias a un proyecto de Leiningen?
- 19. Explicación/documentación del macroproyecto de leiningen
- 20. Automatización de la administración de dependencia local de Leiningen
- 21. Incrustar Python en una aplicación de iPhone
- 22. "Incrustar" JasperServer en una aplicación web externa?
- 23. Incrustar una aplicación en una ventana
- 24. Incrustar ventana del navegador web en Java
- 25. Especifique la versión de publicación con la línea de comandos de MSBuild como versión de ensamblaje del proyecto
- 26. Cómo obtener la versión del proyecto del pom de Mavens en Ant
- 27. Acceso a la versión del proyecto maven en los archivos de configuración de Spring
- 28. Incrustar/desplegar fuente personalizada en la aplicación .NET
- 29. Incrustar mysql en la aplicación de escritorio java
- 30. Incrustar python en la aplicación de C multiproceso
Desafortunadamente parece que no funciona, lo siguiente devuelve nil, w la llamaron usando java en un uberjar de una clase AOT: '(println" blargl "(.getSpecificationVersion (.getPackage (class * ns *)))" \ n "))' – MrEvil