【发布时间】:2021-05-03 10:34:32
【问题描述】:
我想创建一个 leiningen 应用程序的 uberjar。我的配置是:
:uberjar {:omit-source true
:aot :all
:uberjar-name "myapp.jar"
:source-paths ["env/prod/clj" ]
:resource-paths ["env/prod/resources"]}
但是在执行lein uberjar 时,我发现项目中的文件正在编译,但是编译卡在包含大部分代码的文件上,持续了十分钟并且还在计数。此文件不超过 140 行。
【问题讨论】:
-
我的猜测是,在该命名空间的顶层有一些定义的东西,它有副作用。例如。一些数据库连接或启动一些服务器或其他任何东西。
-
是的,我刚刚发现这一行: (defonce server (http/start-server server-handler {:port 8982})) 导致挂起。如何解决这个问题?
-
不要把这样的东西放在顶层。编写一个函数,启动这个服务器。然后从你的主要调用它。对于开发,您可以从 REPL 运行该功能,或者您可以在您的 user-ns 中添加一些重新加载/重新启动逻辑。
defonce仅表示它一旦存在就不会被重新定义。