studio - Obteniendo la versión del proyecto de clojure actual en la respuesta.
visual studio installer (7)
¿Es posible capturar la información del proyecto dentro del clojure repl?
Por ejemplo, si hubiera un proyecto definido:
(defproject blahproject "0.1.2" ....)
Al ejecutar una respuesta en el directorio del proyecto, ¿existe una función como esta?
> (project-version)
;=> 0.1.2
Agregue el siguiente código al final de project.clj:
(def project (assoc-in project [:repl-options :init]
`(~''def ~''project-version ~(project :version))))
Ahora tendrá una var llamada project-version
en el espacio de nombres inicial para la respuesta.
Como dijo vemv , los archivos de proyectos de Leiningen son solo datos de Clojure. Entonces, es fácil acceder a su proyecto como un hash-map
ordinario:
(->> "project.clj"
slurp
read-string
(drop 2)
(cons :version)
(apply hash-map)
(def project))
Si necesita esta variable solo en su repl
, puede agregarla a repl-options
de project.clj
su project.clj
:
(defproject yourproject "0.1.0"
:description ""
:url ""
:dependencies [ [org.clojure/clojure "1.4.0"]]
:repl-options { :init (->> "project.clj"
slurp
read-string
(drop 2)
(cons :version)
(apply hash-map)
(def project))})
Ahora, tienes variable de project
en tu repl
. Por lo tanto, para acceder a la versión de su proyecto puede simplemente escribir (:version project)
.
Por supuesto, simplemente puede usar el código Leiningen nativo para analizar su archivo de proyecto:
(defproject yourproject "0.1.0"
:description ""
:url ""
:dependencies [ [org.clojure/clojure "1.4.0"]
[leiningen-core "2.1.3"]]
:repl-options { :init (do (require ''leiningen.core.project)
(def project
(leiningen.core.project/read)))})
Pero, si solo necesita la versión de su proyecto y nada más, entonces es mejor usar Ankur''s solución Ankur''s .
Como se describe en esta discussion .
(ns myproject.example
(:require [clojure.java.io :as io])
(:import java.util.Properties))
(defn get-version [dep]
(let [path (str "META-INF/maven/" (or (namespace dep) (name dep))
"/" (name dep) "/pom.properties")
props (io/resource path)]
(when props
(with-open [stream (io/input-stream props)]
(let [props (doto (Properties.) (.load stream))]
(.getProperty props "version"))))))
(get-version ''myproject) ; => 0.1.0
(get-version ''org.clojure/clojure) ; => 1.3.0
Los archivos de proyectos de Leiningen son solo datos de Clojure :)
(-> "/path/to/project.clj" slurp read-string (nth 2))
Para un enfoque más completo, es posible que desee echar un vistazo al complemento de configuración de Leiningen ( https://github.com/davidsantiago/configleaf ). Hará que el mapa del proyecto, con los perfiles activos fusionados, esté disponible para el código del proyecto en un espacio de nombres de su elección.
Si bien puedes analizar project.clj
ti mismo, esto puede ser molesto. También es mucho trabajo. En su lugar, puedes simplemente hacer:
(System/getProperty "projectname.version")
Utilizo environ ( https://github.com/weavejester/environ ) que absorbe la configuración de varias fuentes, incluidas las propiedades del sistema. La versión del proyecto aparece como :<project-name>-version
:
foobar.repl=> (require ''[environ.core :refer [env]])
nil
foobar.repl=> (:foobar-version env)
"0.1.0-SNAPSHOT"