One alternative to this would be to start a Nailgun server. You can
add to the classpath quite easily.

That said, this looks pretty interesting.

Ambrose

On Thu, Mar 31, 2011 at 8:19 PM, Vitaly Peressada <vit...@ufairsoft.com>wrote:

> Wanted to add jar to classpath without restarting REPL. Recalled java
> reflection hack. Ported to Clojure.
>
> user=> (import (org.apache.commons.cli Parser))
> ; fails with "#<CompilerException java.lang.ClassNotFoundException:
> org.apache.commons.cli.Parser"
>
> user=>
> (import (java.io File)
>   (java.net URL URLClassLoader)
>   (java.lang.reflect Method))
>
> (defn add-to-cp [#^String jarpath]
>  (let [#^URL url (.. (File. jarpath) toURI toURL)
>       url-ldr-cls (. (URLClassLoader. (into-array URL [])) getClass)
>       arr-cls (into-array Class [(. url getClass)])
>       arr-obj (into-array Object [url])
>       #^Method mthd (. url-ldr-cls getDeclaredMethod "addURL" arr-
> cls)]
>   (doto mthd
>     (.setAccessible true)
>     (.invoke (ClassLoader/getSystemClassLoader) arr-obj))
>   (println (format "Added %s to classpath" jarpath))))
>
> ; any jar not on a classpath will do
> (add-to-cp "c:/m2repo/commons-cli/commons-cli/1.0/commons-
> cli-1.0.jar")
>
> ; import any class from loaded jar
> (import (org.apache.commons.cli Parser))
>
> Has anyone seen something similar? If no, do you think this could be
> useful in clojure.contrib.repl-utils or else?
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to