diff --git a/src/babashka/impl/classpath.clj b/src/babashka/impl/classpath.clj index 8c4cb1fe..82428526 100644 --- a/src/babashka/impl/classpath.clj +++ b/src/babashka/impl/classpath.clj @@ -47,9 +47,10 @@ (path-from-jar jar-file resource-paths opts))) (defn part->entry [part] - (if (str/ends-with? part ".jar") - (JarFileResolver. (io/file part)) - (DirectoryResolver. (io/file part)))) + (when-not (str/blank? part) + (if (str/ends-with? part ".jar") + (JarFileResolver. (io/file part)) + (DirectoryResolver. (io/file part))))) (deftype Loader [entries] IResourceResolver @@ -62,7 +63,7 @@ (defn loader [^String classpath] (let [parts (.split classpath path-sep) - entries (map part->entry parts)] + entries (keep part->entry parts)] (Loader. entries))) (defn source-for-namespace [loader namespace opts] diff --git a/test/babashka/uberjar_test.clj b/test/babashka/uberjar_test.clj index eb420676..ee2e85a3 100644 --- a/test/babashka/uberjar_test.clj +++ b/test/babashka/uberjar_test.clj @@ -4,6 +4,13 @@ [clojure.string :as str] [clojure.test :as t :refer [deftest is testing]])) +(defn count-entries [jar] + (with-open [jar-file (java.util.jar.JarFile. jar)] + (count (map #_prn + identity + (enumeration-seq + (.entries jar-file)))))) + (deftest uberjar-test (testing "uberjar with --main" (let [tmp-file (java.io.File/createTempFile "uber" ".jar") @@ -36,4 +43,18 @@ ;; running (is (= "(\"42\")\n" (tu/bb nil "--jar" path "-m" "my.main-main" "42"))) (is (= "(\"42\")\n" (tu/bb nil "--classpath" path "-m" "my.main-main" "42"))) - (is (= "(\"42\")\n" (tu/bb nil path "42"))))))) + (is (= "(\"42\")\n" (tu/bb nil path "42")))))) + (testing "throw on empty classpath" + (let [tmp-file (java.io.File/createTempFile "uber" ".jar") + path (.getPath tmp-file)] + (.deleteOnExit tmp-file) + (is (thrown-with-msg? + Exception #"classpath" + (tu/bb nil "uberjar" path "-m" "my.main-main"))))) + (testing "ignore empty entries on classpath" + (let [tmp-file (java.io.File/createTempFile "uber" ".jar") + path (.getPath tmp-file)] + (.deleteOnExit tmp-file) + (tu/bb nil "--classpath" ":::" "uberjar" path "-m" "my.main-main") + ;; Only a manifest entry is added + (is (< (count-entries path) 3)))))