我正在尝试为KSQL编写一个用户自定义函数。KSQL需要你给它一个带有注解的Java类的uberjar。我尝试了使用gen-class和一个与Clojure交互的手工编写的Java文件。在两种情况下,uberjar都加载得很好,我的类注解通过反射被检测到。但是,只要涉及到Clojure的操作,例如Clojure.var("clojure.core", "require"),就会抛出诸如"java.lang.ExceptionInInitializerError"和"java.lang.NoClassDefFoundError: Could not initialize class clojure.java.api.Clojure"之类的异常。感觉我可能没有弄清楚uberjar的构建方式。或者这可能是类加载器的问题。KSQL明显进行了某种类型的类路径隔离,以防止用户定义的函数相互干扰。