我正在尝试为KSQL编写一个用户自定义函数,使用Clojure。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显示,它似乎进行了一些类路径隔离,以防止用户自定义函数相互冲突。