从Clojure导入Java类报错:ClassNotFoundException解决方案求助
解决Clojure导入自定义Java类的ClassNotFoundException问题
问题根源
- 配置文件不兼容:你用
clj命令启动项目,但project.clj是Leiningen的专属配置文件,clj默认读取deps.edn而非project.clj,导致你设置的:java-source-paths完全没生效。 - Java类结构可能有误:需确保
void2d/目录下的Window.java正确声明包路径,且文件名与类名严格一致(Java大小写敏感):package void2d; public class Window { // 类实现代码 }
修复方案
方案一:改用Leiningen运行(保留project.clj)
- 确保已安装Leiningen,在项目根目录(
cloj\下)执行命令:
注意:需给lein run -m vtdvtd.clj添加命名空间声明,否则Leiningen无法识别入口:(ns vtd) (import '(void2d Window)) ;; 后续业务代码
方案二:适配clj命令(使用deps.edn,推荐)
- 在项目根目录创建
deps.edn文件,内容如下:{:paths ["." "void2d/"] :aliases {:main {:main-opts ["vtd.clj"]}}} - 执行以下命令启动项目:
clj -M:main
额外检查项
- 确认
void2d/目录下是否有编译后的.class文件,若没有,Clojure会自动编译Java源文件,但前提是路径配置正确。 - 验证
Window.java的包声明package void2d;与目录结构void2d/完全匹配。
内容的提问来源于stack exchange,提问作者sad
相关产品推荐
相关产品推荐

