Added setting of default jar names through :jar-name & :uberjar-name.

Also added an optional uberjar-name argument to the uberjar task and
factored out the default jar/uberjar naming schemes into separate
functions.
This commit is contained in:
Michał Marczyk 2010-06-24 02:54:55 +02:00
parent 9874a42094
commit 4fb55619ea
2 changed files with 34 additions and 27 deletions

View file

@ -62,6 +62,10 @@
(doseq [filespec filespecs]
(copy-to-jar project jar-os filespec))))
(defn get-default-jar-name [project]
(or (:jar-name project)
(str (:name project) "-" (:version project) ".jar")))
(defn get-jar-filename [project jar-name]
(let [jar-dir (:jar-dir project)]
(.mkdirs (file jar-dir))
@ -94,4 +98,4 @@ be used as the main-class for an executable jar."
(write-jar project jar-path filespecs)
(println "Created" jar-path)
jar-path))
([project] (jar project (str (:name project) "-" (:version project) ".jar"))))
([project] (jar project (get-default-jar-name project))))

View file

@ -4,7 +4,7 @@
(:use [clojure.zip :only [xml-zip]]
[clojure.java.io :only [file copy]]
[clojure.contrib.zip-filter.xml :only [xml-> tag=]]
[leiningen.jar :only [get-jar-filename jar]])
[leiningen.jar :only [get-default-jar-name get-jar-filename jar]])
(:import [java.util.zip ZipFile ZipOutputStream ZipEntry]
[java.io File FileOutputStream PrintWriter]))
@ -37,31 +37,34 @@
[(into skip-set (copy-entries zipfile out #(skip-set (.getName %))))
(concat components (read-components zipfile))]))
(defn get-default-uberjar-name [project]
(or (:uberjar-name project)
(str (:name project) \- (:version project) "-standalone.jar")))
(defn uberjar
"Create a jar like the jar task, but including the contents of each of
the dependency jars. Suitable for standalone distribution."
[project]
(jar project)
(let [jarname-base (str (:name project) \- (:version project))
standalone-base (str jarname-base "-standalone.jar")
standalone-filename (get-jar-filename project standalone-base)]
(with-open [out (-> (file standalone-filename)
(FileOutputStream.) (ZipOutputStream.))]
(let [deps (->> (.listFiles (file (:library-path project)))
(filter #(.endsWith (.getName %) ".jar"))
(cons (file (get-jar-filename
project (str jarname-base ".jar")))))
[_ components] (reduce (partial include-dep out)
[#{"META-INF/plexus/components.xml"} nil]
deps)]
(when-not (empty? components)
(.putNextEntry out (ZipEntry. "META-INF/plexus/components.xml"))
(binding [*out* (PrintWriter. out)]
(xml/emit {:tag :component-set
:content
[{:tag :components
:content
components}]})
(.flush *out*))
(.closeEntry out))))
(println "Created" standalone-filename)))
([project uberjar-name]
(jar project)
(let [standalone-filename (get-jar-filename project uberjar-name)]
(with-open [out (-> (file standalone-filename)
(FileOutputStream.) (ZipOutputStream.))]
(let [deps (->> (.listFiles (file (:library-path project)))
(filter #(.endsWith (.getName %) ".jar"))
(cons (file (get-jar-filename
project (get-default-jar-name project)))))
[_ components] (reduce (partial include-dep out)
[#{"META-INF/plexus/components.xml"} nil]
deps)]
(when-not (empty? components)
(.putNextEntry out (ZipEntry. "META-INF/plexus/components.xml"))
(binding [*out* (PrintWriter. out)]
(xml/emit {:tag :component-set
:content
[{:tag :components
:content
components}]})
(.flush *out*))
(.closeEntry out))))
(println "Created" standalone-filename)))
([project] (uberjar project (get-default-uberjar-name project))))