更新ASM库(针对CLJ-713)的提交后,Clojure构建通过所有测试,除了reflect.clj中的compare-reflect-and-asm。
这可以部分归因于以下两个表达式的行为差异,这两个表达式是用最新的Clojure和JDK8评估的
`
;; 以下两行曾在2014年1月11日的最新Clojure 1.6.0-master-SNAPSHOT中工作,但使用JDK 8会抛出异常。
;; 如果在JDK 6或JDK 7上运行,但在JDK 8上抛出异常。
(import '[clojure.asm ClassReader ClassVisitor Type Opcodes])
(def r (ClassReader. "java.lang.Object"))
`
我不确定,但从一些Google搜索来看,这可能是ASM库版本4的局限性——当尝试读取由JDK 8产生的类文件时,它抛出异常,因为类文件版本号较新。支持这一结论的链接
http://mail-archive.ow2.org/asm/2013-02/msg00000.html
http://forge.ow2.org/tracker/index.php?func=detail&aid=316375&group_id=23&atid=350023
一些替代方案
(1) 再次更新ASM到支持JDK 8类文件的版本
(2) 禁用compare-reflect-and-asm测试。Clojure本身除了这个单元测试不使用AsmReflector进行任何事情。Java反射器是默认的。