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:
parent
9874a42094
commit
4fb55619ea
2 changed files with 34 additions and 27 deletions
|
@ -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))))
|
||||
|
|
|
@ -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))))
|
||||
|
|
Loading…
Reference in a new issue