 If no ClassLoader is provided, RT/baseLoader is assumed."
   ([] (all-classpath-urls (clojure.lang.RT/baseLoader)))
   ([cl]
-     (->> (iterate #(.getParent %) cl)
+     (->> (iterate #(.getParent ^ClassLoader %) cl)
        (take-while identity)
        reverse
-       (filter (partial instance? java.net.URLClassLoader))
-       (mapcat #(.getURLs %))
+       (filter (partial instance? URLClassLoader))
+       (mapcat #(.getURLs ^URLClassLoader %))
        distinct)))
 
+(defn ^ZipFile zip-file [jar-path]
+  (cond
+    (instance? File jar-path) (ZipFile. ^File jar-path)
+    (string? jar-path) (ZipFile. ^String jar-path)
+    :else
+    (throw
+      (IllegalArgumentException. (str "Cannot construct zipfile from " jar-path)))))
+
 (defn jar-entry-names* [jar-path]
-  (with-open [z (java.util.zip.ZipFile. jar-path)]
-    (doall (map #(.getName %) (enumeration-seq (.entries z))))))
+  (with-open [z (zip-file jar-path)]
+    (doall (map #(.getName ^ZipEntry %) (enumeration-seq (.entries ^ZipFile z))))))
 
 (def jar-entry-names (memoize jar-entry-names*))
 

    (map io/file)
    (reduce
      (fn [files jar-or-dir]
        (let [name (.toLowerCase (.getName jar-or-dir))
              ext  (.substring name (inc (.lastIndexOf name ".")))]
          (->> (when (.exists jar-or-dir)
                 (cond
                   (.isDirectory jar-or-dir)
                   (find-js-fs (str (.getAbsolutePath jar-or-dir) "/" path))

                   (#{"jar" "zip"} ext)
                   (find-js-jar jar-or-dir path)

  (first
    (filter
      (fn [res]
        (re-find #"(\/google-closure-library-0.0*|\/google-closure-library\/)" (.getPath ^URL res)))
      (enumeration-seq (.getResources (.getContextClassLoader (Thread/currentThread)) path)))))

(defn goog-dependencies*
