J'ai donc une situation bizarre ici.
Je suis en train de travailler sur l'extension du Graal Clojure plugin dans Graal 2.0.0 (et 2.1.0-INSTANTANÉ) et je voulais mettre à jour à Clojure 1.3.0 et ajouter clojure.outils.la journalisation.
Clojure déclenche une exception lors de la compilation d'un
proxy de un ByteArrayOutputStream
en clojure.tools.logging
's journal-flux de fonction:
ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn
( https://gist.github.com/a6ae681c37091a3d2379 )
Je suis allé retiré clojure.tools.logging
et a écrit une dépouillé de proxy d' Object
:
(proxy [java.lang.Object] [] (toString [] "proxy's toString"))
et il a également lancé le même ClassCastException
et le message.
J'ai essayé d'imprimer un macroexpand-1 du proxy et a obtenu la même chose.
Je revenue à Clojure 1.2.0 et proxy a bien fonctionné de nouveau.
J'ai essayé un certain nombre d'incarnations de 1.4.0 et ils présentent le même comportement que 1.3.0. 1.2.1 met également en quelque sorte d'exception, mais je vais essayer de frapper 1.3.0 donc je n'ai pas passer beaucoup de temps avec cela.
La trace de la pile des points de la " génération de la méthode de la fonction définie dans l'une des laissez - formes d' generate-proxy
en core_proxy.clj
.
J'ai ajouté une petite poignée d' println
s'y est pour voir si je pouvais voir ce qui se passait. Peut-être cette déclaration suivante trahira un énorme malentendu du lecteur de ma part mais simplement en ajoutant ceux - println
s a changé le moment de la compilation comportement dans un sens je suis totalement ne s'attendait pas. L'exception de l'emplacement et du type d'exception a complètement changé, même si tous les Clojure tests en mvn package
continuent à passer.
Par exemple, l'ajout d'un seul println
de gen-méthode juste avant qu'il ne commence à générer du bytecode causé Clojure à jeter
ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class
( https://gist.github.com/5a7a40929a6c4a104bd5 )
J'ai vu plusieurs autres erreurs en fonction de l'endroit où j'ai mis l' println
(s), mais c'est la plus répandue.
De toute évidence certains aspects du Graal et Clojure ne sont pas de maillage correctement ici, mais je ne vois pas le lien. Au début, je soupçonne ASM incompatibilité mais depuis Clojure a son propre ASM espace de noms, je ne peux pas voir que la question. Mais peut-être que je me trompe, j'ai été regarder en clojure.lang.Compiler
, de proxy et de générer de serveur proxy pour les jours maintenant essayer d'obtenir que cela fonctionne et j'ai à peu près cessé de faire des progrès, parce que j'ai manqué de vapeur :(
Merci d'avance pour toute aide. Je vais vous donner tout ce que je peux, je voudrais vraiment obtenir de ce travail.
Je m'excuse pour le manque de liens, apparemment, DONC ne me permet pas de poster plus de 2 parce que je suis nouveau. Vous pouvez copier et coller à partir de ci-dessous:
Graal Clojure - github.com/grails-plugins/grails-clojure
Clojure Outils de Journalisation - github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj ligne 133 est le " proxy