diff --git a/src/leiningen/jar.clj b/src/leiningen/jar.clj index f191251a..480c8d07 100644 --- a/src/leiningen/jar.clj +++ b/src/leiningen/jar.clj @@ -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)))) diff --git a/src/leiningen/uberjar.clj b/src/leiningen/uberjar.clj index bc07a6fc..bbd56f91 100644 --- a/src/leiningen/uberjar.clj +++ b/src/leiningen/uberjar.clj @@ -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))))