From 14807e96cabbd6bd5ff42a35fda9d9db0ecc7cf2 Mon Sep 17 00:00:00 2001 From: Conor McDermottroe Date: Thu, 21 Dec 2017 15:01:14 +0000 Subject: [PATCH] Add project coordinate data to JAR metadata This causes entries like: Leiningen-Project-ArtifactId: bar Leiningen-Project-GroupId: foo Leiningen-Project-Version: 1.2.3-SNAPSHOT to be added to META-INF/MANIFEST.MF in JARS for projects with project.clj files like: (defproject foo/bar "1.2.3-SNAPSHOT" ... ) --- src/leiningen/jar.clj | 9 ++++++--- test/leiningen/test/jar.clj | 11 +++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/leiningen/jar.clj b/src/leiningen/jar.clj index 8512f4040..c1058ef76 100644 --- a/src/leiningen/jar.clj +++ b/src/leiningen/jar.clj @@ -22,10 +22,13 @@ (defn- unix-path [path] (.replace path "\\" "/")) -(def ^:private default-manifest +(defn- default-manifest [project] {"Created-By" (str "Leiningen " (main/leiningen-version)) "Built-By" (System/getProperty "user.name") - "Build-Jdk" (System/getProperty "java.version")}) + "Build-Jdk" (System/getProperty "java.version") + "Leiningen-Project-ArtifactId" (:name project) + "Leiningen-Project-GroupId" (:group project) + "Leiningen-Project-Version" (:version project)}) (declare ^:private manifest-entry) @@ -55,7 +58,7 @@ (defn ^:internal make-manifest [project] (let [project-manifest (into {} (:manifest project)) - default-manifest' (cond-> default-manifest + default-manifest' (cond-> (default-manifest project) ;; Add default "Main-Class" only if :main is not ;; explicitly set to nil (:main project :not-found) diff --git a/test/leiningen/test/jar.clj b/test/leiningen/test/jar.clj index 876392b55..d069890b8 100644 --- a/test/leiningen/test/jar.clj +++ b/test/leiningen/test/jar.clj @@ -15,6 +15,7 @@ (def mock-project-1 {:name "mock-project" + :group "mock-group" :version "1.0" :main 'foo.one-two.three-four.bar :manifest [["hello" "world"] @@ -26,6 +27,7 @@ (def mock-project-2 {:name "mock-project" + :group "mock-group" :version "1.0" :main 'foo.one-two.three-four.bar :manifest {"hello" "world" @@ -45,9 +47,14 @@ manifest-map)] (is (= {"Main-Class" "foo.one_two.three_four.bar", "hello" "world"} (select-keys mm ["hello" "Main-Class"]))) - (is (= #{"Manifest-Version" "Main-Class" "hello" "A" "G" "Created-By" "Built-By" - "Build-Jdk" "long-line"} + (is (= #{"A" "Build-Jdk" "Built-By" "Created-By" "G" + "Leiningen-Project-ArtifactId" "Leiningen-Project-GroupId" + "Leiningen-Project-Version" "Main-Class" "Manifest-Version" + "hello" "long-line"} (-> mm keys set))) + (is (= (get mm "Leiningen-Project-ArtifactId") "mock-project")) + (is (= (get mm "Leiningen-Project-GroupId") "mock-group")) + (is (= (get mm "Leiningen-Project-Version") "1.0")) (is (= (get mm "long-line") long-line)) (is (= #{"my-section-1" "my-section-2"} (-> mock-project