经过两次才彻底解决的一个问题,把同事总计的在自己的小本子上转存一下。猛戳此处进入我司blog系统。
在Clojure中使用Luminus进行Web开发时,如果有自定义Java文件,在开发环境中编译(lein javac
)时,会出现ClassNotFoundException
错误。
产生原因:在开发环境下,env->dev->clj->user.clj
文件会自动加载,并且是在Java文件编译前执行。user.clj
文件会引用core
下的start-app
,core.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
网友评论