I'm having an issue using (proxy) to extend a class (JViewport) with an interface (Scrollable). The behavior is as follows: if I clean my code ("lein clean") then try to run it ("lein run"), I get an exception. However, if I edit the file that has the proxy, then run the code again ("lein run"), it works. So there is some weird behavior with AOT compilation...
Steps to reproduce: 1. Create a new project: $ lein new testproxy 2. Edit project.clj to the following: (defproject testproxy "1.0.0-SNAPSHOT" :description "FIXME: write" :dependencies [[org.clojure/clojure "1.2.0"] [org.clojure/clojure-contrib "1.2.0"]] :main testproxy.core) 3. Edit src/testproxy/core.clj to the following: (ns testproxy.core (:gen-class) (:import (javax.swing JFrame)) (:use [testproxy.proxy])) (defn -main [& args] (doto (JFrame.) (.setContentPane scrolled) (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE) (.pack) (.show))) 4. Create src/testproxy/proxy.clj (ns testproxy.proxy (:import (java.awt Dimension)) (:import (javax.swing JViewport Scrollable))) (def scrolled (proxy [JViewport Scrollable] [] (getPreferredSize [] (Dimension. 50 50)) (getPreferredScrollableViewportSize [] (Dimension. 50 50)) (getScrollableBlockIncrement [visibleRect orientation direction] 1) (getScrollableUnitIncrement [visibleRect orientation direction] 1) (getScrollableTracksViewportWidth [] false) (getScrollableTracksViewportHeight [] false))) 5. $ lein run You get the following backtrace (at least I do): Exception in thread "main" java.lang.NoClassDefFoundError: testproxy/ proxy/proxy$javax/swing/JViewport$Scrollable$5c8a670f (NO_SOURCE_FILE: 1) at clojure.lang.Compiler.eval(Compiler.java:5440) at clojure.lang.Compiler.eval(Compiler.java:5414) at clojure.lang.Compiler.eval(Compiler.java:5391) at clojure.core$eval.invoke(core.clj:2382) at clojure.main$eval_opt.invoke(main.clj:235) at clojure.main$initialize.invoke(main.clj:254) at clojure.main$null_opt.invoke(main.clj:279) at clojure.main$main.doInvoke(main.clj:354) at clojure.lang.RestFn.invoke(RestFn.java:422) at clojure.lang.Var.invoke(Var.java:369) at clojure.lang.AFn.applyToHelper(AFn.java:165) at clojure.lang.Var.applyTo(Var.java:482) at clojure.main.main(main.java:37) Caused by: java.lang.NoClassDefFoundError: testproxy/proxy/proxy$javax/ swing/JViewport$Scrollable$5c8a670f at testproxy.proxy$fn__15.invoke(proxy.clj:6) at testproxy.proxy__init.load(Unknown Source) at testproxy.proxy__init.<clinit>(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at clojure.lang.RT.loadClassForName(RT.java:1578) at clojure.lang.RT.load(RT.java:399) at clojure.lang.RT.load(RT.java:381) at clojure.core$load$fn__4511.invoke(core.clj:4905) at clojure.core$load.doInvoke(core.clj:4904) at clojure.lang.RestFn.invoke(RestFn.java:409) at clojure.core$load_one.invoke(core.clj:4729) at clojure.core$load_lib.doInvoke(core.clj:4766) at clojure.lang.RestFn.applyTo(RestFn.java:143) at clojure.core$apply.invoke(core.clj:542) at clojure.core$load_libs.doInvoke(core.clj:4800) at clojure.lang.RestFn.applyTo(RestFn.java:138) at clojure.core$apply.invoke(core.clj:544) at clojure.core$use.doInvoke(core.clj:4880) at clojure.lang.RestFn.invoke(RestFn.java:409) at testproxy.core$loading__4410__auto__.invoke(core.clj:1) at testproxy.core__init.load(Unknown Source) at testproxy.core__init.<clinit>(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at clojure.lang.RT.loadClassForName(RT.java:1578) at clojure.lang.RT.load(RT.java:399) at clojure.lang.RT.load(RT.java:381) at clojure.core$load$fn__4511.invoke(core.clj:4905) at clojure.core$load.doInvoke(core.clj:4904) at clojure.lang.RestFn.invoke(RestFn.java:409) at clojure.core$load_one.invoke(core.clj:4729) at clojure.core$load_lib.doInvoke(core.clj:4766) at clojure.lang.RestFn.applyTo(RestFn.java:143) at clojure.core$apply.invoke(core.clj:542) at clojure.core$load_libs.doInvoke(core.clj:4800) at clojure.lang.RestFn.applyTo(RestFn.java:138) at clojure.core$apply.invoke(core.clj:542) at clojure.core$require.doInvoke(core.clj:4869) at clojure.lang.RestFn.invoke(RestFn.java:409) at user$eval1.invoke(NO_SOURCE_FILE:1) at clojure.lang.Compiler.eval(Compiler.java:5424) ... 12 more Caused by: java.lang.ClassNotFoundException: testproxy.proxy.proxy $javax.swing.JViewport$Scrollable$5c8a670f at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 54 more 6. Now, update the timestamp on proxy.clj: $ touch src/testproxy/ proxy.clj 7. Try "lein run" again. It works... -- 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