【转】Clojure 引用java文件 lein javac 报ClassNotFoundException

经过两次才彻底解决的一个问题,把同事总计的在自己的小本子上转存一下。猛戳此处进入我司blog系统。

在Clojure中使用Luminus进行Web开发时,如果有自定义Java文件,在开发环境中编译(lein javac)时,会出现ClassNotFoundException错误。

产生原因:在开发环境下,env->dev->clj->user.clj文件会自动加载,并且是在Java文件编译前执行。user.clj文件会引用core下的start-appcore.clj文件又会引用handler,如果在handler的引用文件中引用了自定义Java类时,就会出现ClassNotFoundException错误。

解决方法一:修改user.clj文件名

;; 1. 将 user.clj 文件名修改为 hctest.clj
;; 2. 修改 hctest.clj 文件命名空间
(ns hctest)
;; 3. 修改 project.clj 文件下的 :project/dev -> :repl-options -> :init-ns 值
{:project/dev
 {:repl-options
  {:init-ns hctest}}}

解决方法二:移动user.clj文件

;; 可选 --> 1. 修改 project.clj 下的 :profiles -> :uberjar -> :prep-tasks,在开始添加 "javac"
{:profiles
 {:uberjar 
  {:prep-tasks ["javac" "compile"]}}}

;; 2. 将 env->clj->user.clj 文件移到到指定文件夹下,比如 env->clj->empty-> user.clj,并修改命名空间为 empty.user
(ns empty.user)
;; 3. 修改 project.clj 下的 :project/dev -> :repl-options -> :init-ns 值
{:project/dev
 {:repl-options
  {:init-ns empty.user}}}

参考:

https://github.com/luminus-framework/luminus-template/issues/319

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。